从对象列表中过滤键

时间:2019-04-11 23:35:51

标签: javascript ecmascript-6

如何从ES6中的对象列表中过滤出每个键?有了这个原始图片(此列表中可以有很多):

[{"x": 0, 
 "y": 0, 
 "width": 10, 
 "frame_variables": [{"lookup_type": null,"lookup_id": null}]
}]

我要退货:

[{"x": 0, 
 "y": 0, 
 "width": 10
}]

我在想列出其中一些内容,但不确定语法:

displayFrames: function () {
  return this.frames.filter(e => e.key !== 'frame_variables')
}

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

let array = [{"x": 0, 
 "y": 0, 
 "width": 10, 
 "frame_variables": [{"lookup_type": null,"lookup_id": null}]
}];

let result = array.map(({ frame_variables, ...rest }) => ({ ...rest }));

console.log(result);

您需要使用map函数来转换数组中的所有元素。使用destructuring,您可以将frame_variables键与对象的其余部分分开,因此只需返回没有该键的新对象即可。

答案 1 :(得分:2)

过滤用于从数组中删除整个元素。您可以遍历数组并为每个数组调用delete

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

答案 2 :(得分:2)

应该执行以下操作:

let data = {
  "x": 0,
  "y": 0,
  "width": 10,
  "frame_variables": [{
    "lookup_type": null,
    "lookup_id": null
  }]
};

const filterAttribute = (obj, keyToFilterOut) => (Object.keys(obj)).reduce((filteredObj, key) => {
  if (keyToFilterOut !== key) {
    filteredObj[key] = obj[key]
  }
  return filteredObj;
}, {});

console.log(filterAttribute(data, 'frame_variables'))

我的解决方案也不更改原始对象,而是选择完全创建一个新对象-如果您出于其他原因要保留数据的话,这非常好