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
相关产品推荐
相关产品推荐

