JavaScript对象数组重复ID置空处理方案咨询
解决JavaScript数组重复id置空的问题
要实现把数组中重复出现的id置空、仅保留首次出现id的需求,关键是要追踪已经处理过的id——单独用map方法没法实现,是因为它没法在遍历过程中记录之前的状态,搭配一个Set就能轻松解决:
原始数组
const originalArray = [ {id:"B1",name:"Belacost",group:"Quim"}, {id:"B1",name:"Medtown",group:"Bik"}, {id:"B1",name:"Regkim",group:"Dum"}, {id:"C1",name:"CSet",group:"Core"}, {id:"D1",name:"Merigo",group:"Dian"}, {id:"D1",name:"Chilland",group:"Ground"}, {id:"N1",name:"Fiwkow",group:"Vig"}, ];
实现代码
用map结合Set的方式(返回新数组,不修改原数组):
// 用来记录已经出现过的id const seenIds = new Set(); const resultArray = originalArray.map(item => { // 浅拷贝对象,避免修改原数组里的元素 const newItem = {...item}; if (seenIds.has(newItem.id)) { // 已出现过的id,置为空 newItem.id = ""; } else { // 首次出现的id,保留并加入Set seenIds.add(newItem.id); } return newItem; });
运行后resultArray就是预期结果:
[ {id:"B1",name:"Belacost",group:"Quim"}, {id:"",name:"Medtown",group:"Bik"}, {id:"",name:"Regkim",group:"Dum"}, {id:"C1",name:"CSet",group:"Core"}, {id:"D1",name:"Merigo",group:"Dian"}, {id:"",name:"Chilland",group:"Ground"}, {id:"N1",name:"Fiwkow",group:"Vig"}, ]
补充说明
- 用
Set是因为它的has方法查询效率比数组includes更高,数据量大时优势明显; - 必须浅拷贝对象(
{...item}),否则会直接修改原数组元素,破坏原始数据; - 若不需要保留原数组,也可以直接修改原元素,但这种操作容易引发意外问题,不推荐。
内容的提问来源于stack exchange,提问作者C Sharper
相关产品推荐
相关产品推荐

