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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:01:18