gpt4 book ai didi

javascript - 如何从对象中删除属性?

转载 作者:行者123 更新时间:2023-12-03 13:21:04 25 4
gpt4 key购买 nike

当前在 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;
}

我想从 map 中删除未选中的元素
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];

关于javascript - 如何从对象中删除属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4178123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com