删除数组中所有对象的属性

2022-08-30 01:42:50

我想从数组中的每个对象中删除该属性。有没有比使用循环并从每个对象中删除它更好的方法?badfor

var array = [{"bad": "something", "good":"something"},{"bad":"something", "good":"something"},...];

for (var i = 0, len = array.length; i < len; i++) {
  delete array[i].bad;
}

只是似乎应该有一种方法来使用,或者别的什么。我不知道。想法?prototype


答案 1

使用 ES6,您可以解构每个对象以创建一个没有命名属性的新对象:

const newArray = array.map(({dropAttr1, dropAttr2, ...keepAttrs}) => keepAttrs)

答案 2

唯一的其他方式是装饰性的,实际上是循环。

例如:

array.forEach(function(v){ delete v.bad });

笔记:

  • 如果你想与IE8兼容,你需要一个垫片用于forEach。正如你提到的原型,原型.js也有一个垫片
  • delete是最糟糕的“优化杀手”之一。使用它通常会破坏应用程序的性能。如果要真正删除属性,则无法避免它,但通常可以将属性设置为或仅生成没有该属性的新对象。undefined