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

如何从JavaScript数组中移除重复数据并仅保留非重复项

实现需求

从对象数组中移除所有存在重复的条目,仅保留从未重复出现过的元素。

测试数据

const array1 = [
  {id:1 , name:"John" , age:20}, 
  {id:2 , name:"Sam" , age:15},
  {id:3 , name:"Paul" , age:28},
  {id:4 , name:"David" , age:50},
  {id:1 , name:"John" , age:20},
  {id:4 , name:"David" , age:50}
]

预期输出:

[
  {id:2 , name:"Sam" , age:15},
  {id:3 , name:"Paul" , age:28}
]
实现方案

对象是引用类型,直接用===比较只能判断是不是同一个内存地址,没法判断内容是否重复,所以先把对象序列化成字符串作为唯一标识统计出现次数,再筛选出只出现过一次的条目即可:

const countMap = new Map()
// 第一次遍历:统计每个对象的出现次数
array1.forEach(item => {
  const itemKey = JSON.stringify(item)
  countMap.set(itemKey, (countMap.get(itemKey) ?? 0) + 1)
})
// 第二次遍历:筛出仅出现1次的条目
const uniqueOnlyArray = array1.filter(item => {
  return countMap.get(JSON.stringify(item)) === 1
})

这个方案的特点:

  • 时间复杂度为O(n),仅需两次线性遍历,性能远高于嵌套比对的方案
  • 无第三方依赖,原生JS即可直接运行
  • 如果你的数据中对象属性顺序可能不一致,可以先对对象键做排序后再序列化生成key,避免内容相同但key字符串不同的判断误差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:39:40