How to remove a property from an object?
当前在
我正在维护一个跟踪所有选中复选框的对象
1 2 3 4 5 6 7 | var selectedMap = {}; if(event.target == true){ var key = event.target.id; var val = event.target.name; selectedMap[key] = val; } |
我想从地图中删除未选中的元素
1 2 3 | else if(event.target == false){ selectedMap.remove(event.target.id); } |
当我运行它时,它在
所以我的问题是,当复选框未被选中时,如何删除元素?
使用
1 | delete selectedMap[event.target.id]; |
不过,您设置的值不正确。以下是正确的方法:
1 2 3 4 5 | if(event.target == true){ var key = event.target.id; // <== No quotes var val = event.target.name; // <== Here either selectedMap[key] = val; } |
事实上,你可以:
1 2 3 | if(event.target == true){ selectedMap[event.target.id] = event.target.name; } |
将事件目标的内容排除在外,使用简单的字符串可以更容易地预见到这一点:
1 2 3 4 5 6 7 8 | 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"的[继承]属性,事情很快就会变得非常奇怪。)
所以对我来说,我这样做:
1 2 3 | if(event.target == true){ selectedMap["prefix" + event.target.id] = event.target.name; } |
…当然:
1 | delete selectedMap["prefix" + event.target.id]; |
您拥有的是一个对象而不是一个数组(尽管数组是一个对象)。使用
可以使用
1 | delete selectedMap[event.target.id]; |