簡體   English   中英

如何從對象中刪除屬性?

[英]How to remove a property from an object?

目前, checkboxes上設置了一個事件, event.target為我提供了單擊復選框的status (checked = true/false)

我正在維護一個對象,該對象將軌道保留在所有選中的復選框上

var selectedMap  = {};

if(event.target == true){
    var key = event.target.id;
    var val = event.target.name;
    selectedMap[key] = val;
}

我想從地圖中刪除未選中的元素

else if(event.target == false){
  selectedMap.remove(event.target.id);
}

當我運行它時它在Firebug給我錯誤: selectedMap.remove is not a function

所以我的問題是當取消選中復選框時如何刪除元素?

使用delete

delete selectedMap[event.target.id];

但是,您正在設置錯誤的值。 這是正確的方法:

if(event.target == true){
    var key = event.target.id;   // <== No quotes
    var val = event.target.name; // <== Here either
    selectedMap[key] = val;
}

事實上,你可以:

if(event.target == true){
    selectedMap[event.target.id] = event.target.name;
}

將事件目標放在一邊,用簡單的字符串來設想它更容易:

var obj = {};
obj.foo = "value of foo";
alert(obj.foo);    // alerts "value of foo" without the quotes
alert(obj["foo"]); // ALSO alerts "value of foo" without the quotes, dotted notation with a literal and bracketed notation with a string are equivalent
delete obj.foo;    // Deletes the `foo` property from the object entirely
delete obj["foo"]; // Also deletes the `foo` property from the object entirely
var x = "foo";
delete obj[x];     // ALSO deeltes the `foo` property

當使用像這樣的普通對象時,我總是在我的鍵上使用前綴來避免問題。 (例如,如果您的目標元素的ID是“toString”會發生什么?該對象已經有一個名為“toString”的[inherited]屬性,並且很快就會變得非常怪異。)

所以對我來說,我這樣做:

if(event.target == true){
    selectedMap["prefix" + event.target.id] = event.target.name;
}

...而且當然:

delete selectedMap["prefix" + event.target.id];

你擁有的是一個對象而不是一個數組(盡管數組是一個對象)。 使用{}聲明對象文字,而使用[]聲明數組文字。

您可以使用delete刪除對象屬性,如此

delete selectedMap[event.target.id];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM