比较对象数组与键数组,过滤对象数组与数组键。输入:
let a = ['aa']; let b = [{ aa: 1, bb: 2, c: 30 },{ aa: 2, bb: 3, c: 40}];
输出:
b = [{bb: 2, c: 30 },{bb: 3, c: 40}]; original array should be mutate.
clj7thdc1#
与@SachilaRanawaka的答案非常相似,但无需修改原始b数组即可工作:
b
let a = ['aa']; let b = [{ aa: 1, bb: 2, c: 30 },{ aa: 2, bb: 3, c: 40}]; function removeKey(obj, key) { let clone = Object.assign({}, obj); // <-- shallow clone if (key in clone) { delete clone[key]; } return clone; } function removeKeys(keys, objs) { return objs.map(o => keys.reduce(removeKey, o)); } console.log(removeKeys(a, b));
46scxncf2#
你可以采取一个解构与获得其余的方法。这种方法不会改变原始数据。第一个
vsikbqxv3#
它可能可以用更少的代码行来解决,但这是我能想到的第一个。
let keysToRemove = ['aa']; let array = [{ aa: 1, bb: 2, c: 30 },{ aa: 2, bb: 3, c: 40}]; let result = array.map((item) => { let filtered = Object.keys(item) .filter((key) => !keysToRemove.includes(key)) .reduce((obj, key) => { obj[key] = item[key]; return obj; }, {}); return filtered; }); console.log(result);
jm2pwxwz4#
使用map运算符并使用delete从对象中删除属性
map
delete
let a = ['aa']; let b = [{ aa: 1, bb: 2, c: 30 },{ aa: 2, bb: 3, c: 40}]; const result = b.map(item => { Object.keys(item).forEach(key => { if(a.includes(key)){ delete item[key] } }) return item }) console.log(result)
egmofgnx5#
您可以借助Array.forEach()方法简单地实现此要求。现场演示**:**
Array.forEach()
let a = ['aa']; let b = [{ aa: 1, bb: 2, c: 30 },{ aa: 2, bb: 3, c: 40}]; b.forEach(obj => { Object.keys(obj).forEach(key => { a.forEach(item => delete obj[item]) }); }); console.log(b);
5条答案
按热度按时间clj7thdc1#
与@SachilaRanawaka的答案非常相似,但无需修改原始
b
数组即可工作:46scxncf2#
你可以采取一个解构与获得其余的方法。
这种方法不会改变原始数据。
第一个
vsikbqxv3#
它可能可以用更少的代码行来解决,但这是我能想到的第一个。
jm2pwxwz4#
使用
map
运算符并使用delete
从对象中删除属性egmofgnx5#
您可以借助
Array.forEach()
方法简单地实现此要求。现场演示**:**