如何移除数组中每个对象的指定属性?
移除数组对象中指定属性的几种方案
嘿,这个需求在日常开发里太常见了,我给你分享几个实用的方法,你可以根据自己的场景来选:
方法1:直接修改原对象(简单但会改动原数据)
如果不在意原数组里的对象被修改,用Array.map()配合delete操作符最直接:
let a = [{ foo: 1, bar: 1, baz: 1 },{ foo: 2, bar: 2, baz: 2 },{ foo: 3, bar: 3, baz: 3 }]; const result = a.map(obj => { delete obj.bar; // 直接删除对象上的bar属性 return obj; }); console.log(result); // 输出: [{ foo: 1, baz: 1 }, { foo: 2, baz: 2 }, { foo: 3, baz: 3 }]
⚠️ 注意:这个方法会修改原数组里的原始对象,如果之后还需要用到原对象的bar属性,就别用这个。
方法2:创建新对象(推荐,不污染原数据)
如果想保留原对象的完整性,用对象解构赋值来生成新对象是最佳实践:
let a = [{ foo: 1, bar: 1, baz: 1 },{ foo: 2, bar: 2, baz: 2 },{ foo: 3, bar: 3, baz: 3 }]; const result = a.map(({ bar, ...rest }) => rest); // 解构出bar属性,把剩下的所有属性用rest收集,返回rest就是去掉bar的新对象 console.log(result); // 输出: [{ foo: 1, baz: 1 }, { foo: 2, baz: 2 }, { foo: 3, baz: 3 }]
这个方法完全不会改动原数组里的对象,非常适合需要保留原始数据的场景。如果要移除多个属性,直接在解构里加就行:
// 比如同时移除bar和qux属性 const result = a.map(({ bar, qux, ...rest }) => rest);
方法3:动态移除多个属性(灵活应对可变需求)
如果要移除的属性是动态的(比如存在一个数组里),可以用Object.entries()和Object.fromEntries()组合实现:
let a = [{ foo: 1, bar: 1, baz: 1 },{ foo: 2, bar: 2, baz: 2 },{ foo: 3, bar: 3, baz: 3 }]; const propsToRemove = ['bar']; // 可以随时添加更多要移除的属性,比如['bar', 'baz'] const result = a.map(obj => Object.fromEntries( // 过滤掉要移除的属性键 Object.entries(obj).filter(([key]) => !propsToRemove.includes(key)) ) ); console.log(result); // 输出: [{ foo: 1, baz: 1 }, { foo: 2, baz: 2 }, { foo: 3, baz: 3 }]
这个方法的优势是可以灵活配置要移除的属性列表,不用硬编码,适合复杂场景。
内容的提问来源于stack exchange,提问作者vdegenne
相关产品推荐
相关产品推荐

