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

JavaScript如何删除数组所有重复元素(包括首次出现的元素)

实现JavaScript数组去重(删除所有重复出现的元素,包含首次出现实例)

需求明确

合并两个输入数组后,移除所有出现次数≥2的元素,无论重复出现在同一个数组还是跨数组,哪怕第一次出现的实例也要删除,最终保留所有仅出现过1次的元素,顺序保持元素在合并后数组中的原始出现顺序。
输入示例:

  • 数组a = [1,2,2,2,3,4,5,6,6,7]
  • 数组b = [1,2,7,8,9]
    输出结果:[3,4,5,8,9]

实现思路

  • 第一步:合并两个输入数组得到完整的待处理数组
  • 第二步:遍历合并后的数组,统计每个元素的总出现次数
  • 第三步:再次遍历合并后的数组,过滤出出现次数恰好等于1的元素

代码实现

基础版(可读性高,兼容性好)

const a = [1,2,2,2,3,4,5,6,6,7]
const b = [1,2,7,8,9]

function removeAllDuplicate(arr1, arr2) {
  const mergedArr = [...arr1, ...arr2]
  // 用Map统计次数,支持任意类型元素作为键
  const countMap = new Map()
  
  for (const item of mergedArr) {
    countMap.set(item, (countMap.get(item) || 0) + 1)
  }
  
  // 过滤仅出现一次的元素
  return mergedArr.filter(item => countMap.get(item) === 1)
}

console.log(removeAllDuplicate(a, b)) // 输出 [3,4,5,8,9]

简化版(代码更简洁)

const removeAllDuplicate = (arr1, arr2) => {
  const countRecord = [...arr1, ...arr2].reduce((acc, cur) => {
    acc[cur] = (acc[cur] || 0) + 1
    return acc
  }, {})
  return [...arr1, ...arr2].filter(item => countRecord[item] === 1)
}

注意:简化版用普通对象做统计,若数组元素包含非字符串/数字类型(如对象、Symbol)会出现统计错误,这类场景优先用Map实现统计逻辑。

常见问题说明

你之前用单次循环无法实现的核心原因是:单次遍历过程中无法提前知晓当前元素后续会不会再次出现,必须先完成全量次数统计,再做二次过滤,两步操作无法合并为单次循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:42:03