【问题标题】:Remove property in Javascript [duplicate]删除Javascript中的属性[重复]
【发布时间】:2015-07-26 18:24:12
【问题描述】:

我有以下对象

b.push({ data: d, width: 5, color: color });

那我有

b= [{data:10,width:5, color:"yellow"},{data:12,width:5, color:"red"},etc...];

我添加了color 属性,现在我不需要并且我想删除它。我想知道最简单的方法是什么?

【问题讨论】:

标签: javascript


【解决方案1】:

您可以编写一个函数来查找具有属性且该属性具有要删除的目标值的所有对象。\

该程序是不言自明的。如果您缺少概念,请添加评论。

/* Redirect console output to HTML. */ document.body.innerHTML = '';
console.log=function(){document.body.innerHTML+=[].slice.apply(arguments).join(' ')+'\n';};

var b = [{
  data: 'Red',
  width: 1,
  color: '#FF0000'
}, {
  data: 'Blue',
  width : 1,
  color: '#00FF00'
}, {
  data: 'Green',
  width: 1,
  color: '#0000FF'
}];

function removeProperty(items, key, value, propToRemove) {
  items.forEach(function(item) {
    if (item != null && item[key] === value) {
      delete item[propToRemove];
    }
  });
}

// delete the 'color' property of the provided data matches.
removeProperty(b, 'data', 'Blue', 'color');

console.log(JSON.stringify(b, null, '  '));
body { font-family: monospace; white-space: pre; font-size: 11px; }

【讨论】:

  • 为什么是!= null 位?这样你就不能匹配错误的值。事实上,为什么首先要测试,我认为 OP 想从所有对象中删除道具。
  • 它测试对象是否甚至具有属性。它类似于 item.hasOwnProperty('key')。
  • 类似,但不一样。首先拥有它的原因是什么?
【解决方案2】:

如果您使用 .push({}) 并推送一个对象字面量,并且没有以任何其他方式引用这些对象,请使用 map:

b = b.map(function(obj) {
  return {data: obj.data, width: obj.width};
});

如果您碰巧有参考,那么我真正想到的唯一方法就是使用 delete 关键字,即使我不推荐它:

for(var obj of b) {
  delete obj.color;
}

【讨论】:

  • 首选普通的for 循环来遍历数组。
  • 那取决于你是否支持IE,但我会使用现代浏览器for-of
  • 信不信由你,我错过了of 并认为这是一个for/in 循环。我同意,对于未来,for/of 可能是要走的路(尽管我认为它不能达到for 循环的性能)。
  • @FelixKling 你知道for of 是新的,它是ES6 的一部分,它不仅适用于数组。它适用于任何可迭代的东西,arraysstringsmapssets 任何带有正确实现 [Symbol.iterator] 的东西。 2ality.com/2013/06/iterators-generators.html
  • 和 V8 优化 for-of 还有一个消息我不记得在哪里有一篇文章现在 for(var i = 0; i < arr.length; i++) {}for(var i = 0, l = arr.length; i < l; i++) {} 都一样快。
【解决方案3】:

你可以使用 delete 删除它

delete b[0].color

【讨论】:

  • 我有一个对象数组被推入 b。
  • @ilyasUyanik:所以使用循环...?
  • 提供更好的数据集@ilyasUyanik...
  • @ilyasUyanik:没有。使用 forEach 或 for 循环。
  • @ilyasUyanik:循环处理项目列表的内置方法。
猜你喜欢
  • 2019-08-27
  • 2011-12-28
  • 1970-01-01
  • 2010-11-16
  • 2018-03-28
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多