How do I remove a key from a JavaScript object?
假设我们有一个具有这种格式的对象:
1 2 3 4 5
| var thisIsObject= {
'Cow' : 'Moo',
'Cat' : 'Meow',
'Dog' : 'Bark'
}; |
我想做一个按键删除的函数:
1
| removeFromObjectByKey('Cow'); |
- 您希望该函数是jquery函数还是它与jquery有什么关系?
- 这实际上是一个javascript对象,在javascript中不存在关联数组。
- 是的,只是我觉得术语有点混淆,比如它是javascript而不是jquery,它是一个对象而不是数组(op可能来自其他具有关联数组的语言)。
delete运算符允许您从对象中删除属性。
下面的例子都是一样的。
1 2 3 4 5 6 7 8 9
| // Example 1
var key ="Cow";
delete thisIsObject[key];
// Example 2
delete thisIsObject["Cow"];
// Example 3
delete thisIsObject.Cow; |
如果您感兴趣,请阅读理解删除,以进行深入的解释。
- 如果循环访问对象中的键,并且如果它们与某个值匹配,则删除它们,那么循环访问键索引时会受到影响吗?
- 在我看来,运行带有for (var key in object)的对象仍然会匹配该键,并且尝试在循环中使用object[key]会引发错误。(或返回undefined)
- 注意,IE8在某些情况下使用delete时可能会抛出异常。请参阅stackoverflow.com/questions/1073414/…
- 但它在数组中保留了一个未定义的元素,这使得迭代非常困难。
- 有人知道这个操作的运行时间吗?
- 这实际上并不能从地图上删除一个键。
- 在JS专注于大小职位的10年发展中,我以前从未需要过这个,也从未知道它的存在。谢谢你,好心的先生。
- 如果您的linter抱怨使用delete关键字,请使用:Reflect.deleteProperty(object1, 'property1');
如果您使用的是underline.js或lodash,那么有一个函数"omit"可以做到这一点。http://underlinejs.org/省略
1 2 3 4 5 6 7 8
| var thisIsObject= {
'Cow' : 'Moo',
'Cat' : 'Meow',
'Dog' : 'Bark'
};
_.omit(thisIsObject,'Cow'); //It will return a new object
=> {'Cat' : 'Meow', 'Dog' : 'Bark'} //result |
如果要修改当前对象,请将返回对象指定给当前对象。
1
| thisIsObject = _.omit(thisIsObject,'Cow'); |
使用纯javascript时,请使用:
1
| delete thisIsObject['Cow']; |
另一个纯javascript选项。
1 2 3
| thisIsObject.cow = undefined;
thisIsObject = JSON.parse(JSON.stringify(thisIsObject )); |
- 否决了问题是,在下划线和lodash中,omit都返回新对象,不会修改当前对象。所以,这是一个稍微不同的事情。
- @与纯javascript相同。delete o.properrty在幕后造成的伤害要比好处大得多,因为它改变了o的隐藏类,使其成为一个普通的缓慢对象。
- @Mateusznowak不,它是不一样的。您所说的实现细节可能有所不同,但在javascript本身中,delete修改对象并不会创建新的对象。
- object.property=未定义是合法的。工作得很好!(投票赞成)
- 谢谢,伙计,很好的解决办法。
- 很好记住:如果对象的键是数字,那么您可能需要,_.omit(myJSONobject, key.toString())。
- 投票赞成的在许多情况下,新的不变对象更可取。
- FIY省略了从LATASH和取代皮克比
- KarlPokus,谢谢你提供的信息。无论如何,Loasy5.0.0,但要释放。到目前为止还没有被禁止的警告(4.174)。谢谢
- upvoted:将此用于React JS
- 我很抱歉投了反对票,但这个主题.cow=未定义;非常误导人。object.keys(thisisobject)仍将拾取"cow"。所以它并没有真正被删除。
这就像:
1 2 3
| (1) delete object.keyname;
(2) delete object["keyname"]; |