JavaScript中用键数组过滤对象数组并修改原数组
按指定键数组移除对象数组中的属性(修改原数组)
需求说明
给定一个键数组和一个对象数组,需要遍历对象数组中的每个对象,移除所有属性名存在于键数组中的属性,并且必须直接修改原数组,不能返回新数组。
输入示例
let a = ['aa']; let b = [{ aa: 1, bb: 2, c: 30 },{ aa: 2, bb: 3, c: 40}];
解决方案代码
// 遍历原数组的每个对象,直接修改原对象 b.forEach(obj => { a.forEach(key => { delete obj[key]; }); }); console.log(b); // 输出结果:[{bb: 2, c: 30 },{bb: 3, c: 40}]
代码解释
- 使用
forEach遍历原数组b:因为对象是引用类型,遍历过程中操作的就是原数组里的对象实例,直接修改会同步到原数组中。 - 对每个对象遍历键数组
a:用delete操作符删除对象的对应属性,这会直接修改原对象的结构。 - 无需额外判断属性是否存在:如果键数组中的属性在对象里不存在,
delete操作不会报错,只会静默跳过。
性能优化版(适合大量数据场景)
如果键数组或对象数组规模较大,建议把键数组转为Set,利用Set.has()的O(1)查找效率提升性能:
const keySet = new Set(a); b.forEach(obj => { // 遍历当前对象的所有属性键 Object.keys(obj).forEach(key => { if (keySet.has(key)) { delete obj[key]; } }); });
内容的提问来源于stack exchange,提问作者Kavya Pathak
相关产品推荐
相关产品推荐

