【问题标题】:How do I remove a key from a JavaScript object? [duplicate]如何从 JavaScript 对象中删除键? [复制]
【发布时间】:2011-03-28 04:36:13
【问题描述】:

假设我们有一个具有这种格式的对象:

var thisIsObject= {
   'Cow' : 'Moo',
   'Cat' : 'Meow',
   'Dog' : 'Bark'
};

我想做一个按键删除的功能:

removeFromObjectByKey('Cow');

【问题讨论】:

  • 你希望函数是jQuery函数还是和jQuery有什么关系?
  • 那实际上是一个JavaScript对象,JavaScript中不存在关联数组。
  • 是的,我认为只是对术语有些混淆,即它是 Javascript 而不是 Jquery,它是一个对象而不是数组(OP 可能来自其他具有关联数组的语言)。

标签: javascript


【解决方案1】:

delete 运算符允许您从对象中删除属性。

以下示例都做同样的事情。

// Example 1
var key = "Cow";
delete thisIsObject[key]; 

// Example 2
delete thisIsObject["Cow"];

// Example 3
delete thisIsObject.Cow;

如果您有兴趣,请阅读Understanding Delete 以获得深入的解释。

【讨论】:

  • 如果你在一个对象中循环,如果它们匹配某个值就删除它们,这会影响你循环时的键索引吗?
  • 请注意,在某些情况下使用delete 时,IE8 可能会抛出异常。见stackoverflow.com/questions/1073414/…
  • 有人知道这个操作的运行时间吗?
  • 这实际上并没有从地图上移除眼睛。
  • 在 10 年的大大小小 JS 开发中,我从来没有需要过这个,也不知道它的存在。好心的先生,谢谢你的这篇文章。
【解决方案2】:

很简单:

delete object.keyname;

delete object["keyname"];

【讨论】:

  • 如果密钥是生成的数字,并且我们不知道它是否存在,我们可以下一步:const unknownKey = 100500;delete object[`${unknownKey}`];
  • 这个答案与第一个答案有何不同?
【解决方案3】:

如果您使用的是 Underscore.js 或 Lodash,有一个函数 'omit' 可以做到这一点。
http://underscorejs.org/#omit

var thisIsObject= {
    'Cow' : 'Moo',
    'Cat' : 'Meow',
    'Dog' : 'Bark'
};
_.omit(thisIsObject,'Cow'); //It will return a new object

=> {'Cat' : 'Meow', 'Dog' : 'Bark'}  //result

如果要修改当前对象,请将返回对象赋值给当前对象。

thisIsObject = _.omit(thisIsObject,'Cow');

对于纯 JavaScript,使用:

delete thisIsObject['Cow'];

另一种选择纯 JavaScript。

thisIsObject = Object.keys(thisIsObject).filter(key =>
    key !== 'cow').reduce((obj, key) =>
    {
        obj[key] = thisIsObject[key];
        return obj;
    }, {}
);

【讨论】:

  • 投反对票。问题是下划线和 lodash _.omit 都返回新对象,不会修改当前对象。所以,这有点不同。
  • @shabunc 与纯 JavaScript 相同。 delete o.properrty 在幕后弊大于利,因为它改变了 o 的隐藏类并使其成为一个通用的慢对象。
  • object.property = undefined 是合法的。工作完美! (赞成)
  • 赞成。在许多情况下,最好使用新的不可变对象。
  • 很抱歉投了反对票,但是 thisIsObject.cow = undefined;非常具有误导性。 Object.keys(thisIsObject) 仍然会选择“牛”。所以它并没有真正被删除。
猜你喜欢
  • 2016-02-28
  • 2018-05-27
  • 2012-06-17
  • 2018-04-16
  • 1970-01-01
  • 2011-03-24
  • 2022-08-04
相关资源
最近更新 更多