You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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}]

代码解释

  1. 使用forEach遍历原数组b:因为对象是引用类型,遍历过程中操作的就是原数组里的对象实例,直接修改会同步到原数组中。
  2. 对每个对象遍历键数组a:用delete操作符删除对象的对应属性,这会直接修改原对象的结构。
  3. 无需额外判断属性是否存在:如果键数组中的属性在对象里不存在,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:40:13