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

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

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

似乎应该有一种方法来使用原型之类的。我不知道。想法吗?


当前回答

这对我来说很有效!

export function removePropertiesFromArrayOfObjects(arr = [], properties = []) {
return arr.map(i => {
    const newItem = {}
    Object.keys(i).map(key => {
        if (properties.includes(key)) { newItem[key] = i[key] }
    })
    return newItem
})
}

其他回答

我建议使用Object。在forEach()循环中赋值,以便对象被复制并且不会影响原始对象数组

var res = [];
array.forEach(function(item) { 
    var tempItem = Object.assign({}, item);
    delete tempItem.bad; 
    res.push(tempItem);
});
console.log(res);

其他唯一的方法是表面上的,实际上是循环。

例如:

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

注:

如果你想要兼容IE8,你需要为forEach准备一个垫片。正如你提到的prototype, prototype.js也有一个垫片。 删除是最糟糕的“优化杀手”之一。使用它通常会破坏应用程序的性能。如果你真的想要删除一个属性,你无法避免它,但你通常可以将属性设置为undefined,或者只是构建不带属性的新对象。

在我看来,这是最简单的变体

array.map(({good}) => ({good}))

这对我来说很有效!

export function removePropertiesFromArrayOfObjects(arr = [], properties = []) {
return arr.map(i => {
    const newItem = {}
    Object.keys(i).map(key => {
        if (properties.includes(key)) { newItem[key] = i[key] }
    })
    return newItem
})
}

外面有很多图书馆。这完全取决于你的数据结构有多复杂(例如,考虑深度嵌套的键)

我们喜欢对象字段,因为它也适用于深度嵌套的层次结构(build for api fields参数)。下面是一个简单的代码示例

// const objectFields = require('object-fields'); Const array = [{bad: 'something', good: 'something'}, {bad: 'something', good: 'something'}]; const retain = objectfields . retain (['good']); 保留(数组); console.log(数组); // => [ { 好:“东西”},{好:‘东西’}] .as-console-wrapper {max-height: 100% !重要;上图:0} < script src = " https://bundle.run/object-fields@2.0.19 " > < /脚本>

免责声明:我是对象字段的作者