如何过滤数组对象指定属性,生成保留剩余属性的新数组
实现方案
你之前用filter()方法达不到预期是因为Array.filter()的作用是筛选数组中符合条件的元素,而非对单个元素内部的属性做裁剪,你需要的是遍历数组所有元素,对每个元素本身做属性过滤,使用Array.map()配合对象属性过滤逻辑即可实现需求。
动态排除属性(支持传入任意排除列表)
这个方案完全匹配你的需求,不需要硬编码要排除的属性,可直接传入动态的filterList使用:
const originalArray =[ {id: 1, name:"jim", email:"jim@mail.com",age:20}, {id: 1, name:"jom", email:"jom@mail.com",age:30} ] const filterList = ["id","age"] const newArray = originalArray.map(item => Object.fromEntries( // 遍历对象的所有键值对,过滤掉排除列表中存在的属性 Object.entries(item).filter(([key]) => !filterList.includes(key)) ) )
其他可选写法
如果要排除的属性是固定的,也可以直接用解构赋值+剩余运算符实现,写法更简洁:
const newArray = originalArray.map(({id, age, ...rest}) => rest)
如果需要兼容不支持Object.fromEntries的旧环境,可以用reduce实现同等逻辑:
const newArray = originalArray.map(item => { return Object.keys(item).reduce((result, key) => { if (!filterList.includes(key)) { result[key] = item[key] } return result }, {}) })
内容的提问来源于stack exchange,提问作者jjlittle
相关产品推荐
相关产品推荐

