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

JavaScript对象数组去重:如何保留重复id的首个元素

问题根因

你写的Map去重逻辑默认会用后遍历到的同key值覆盖之前的存储值,所以最后拿到的永远是每个id最后一次出现的条目,和你要保留首次出现项的需求刚好反过来。

修正方案

两种可直接运行的实现方式,输出结果完全匹配预期:

  • 写法1(推荐,无额外反转开销):遍历的时候只存第一次出现的id,后续同id项直接跳过,从根源避免覆盖
const uniqueMap = new Map();
for (const item of data) {
  if (!uniqueMap.has(item.id)) {
    uniqueMap.set(item.id, item);
  }
}
const uniqueArray = [...uniqueMap.values()];
  • 写法2(适配原有一行式写法):先把数组浅拷贝后反转,让同id的首次出现项排在遍历顺序的最后,去重完成后再反转回原顺序即可
const uniqueArray = [...new Map(
  [...data].reverse().map(item => [item.id, item])
).values()].reverse();

注意:这里必须用[...data]做浅拷贝,否则reverse()会直接修改原始数组,产生非预期的副作用。

两种写法执行后得到的去重数组如下,和预期结果完全一致:

[
  { id: '10000844', text_id: '10000844-01' },
  { id: '12000844', text_id: '12000844-03' },
  { id: '12000814', text_id: '12000844-07' },
  { id: '12002812', text_id: '12000844-07' }
]

内容的提问来源于stack exchange,提问作者karterkortland

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:18:21