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

JS如何合并两个数组并删除共有重复值,仅保留各自独有的元素

数组对称差集实现问题解决方案

现有代码的问题

第一个嵌套for循环版本

  • 下标书写错误:arr3.push(arr1[1]) 固定读取arr1索引为1的元素,应该改为arr1[i]
  • 逻辑结构错误:遍历arr1每个元素时都会完整遍历一次arr2插入元素,会导致arr2的元素被重复插入多次
  • 核心判断逻辑缺失:仅判断元素是否已经在结果数组中,没有过滤掉同时存在于两个输入数组中的公共元素

第二个filter去重版本

  • 功能不符合需求:仅对合并后的数组做了普通去重,保留了所有出现过的元素各一次,没有剔除两个数组共有的元素
  • 函数无返回值:执行完逻辑后没有return arr3,调用函数输出会得到undefined

正确实现方案

你需要的是两个数组的对称差集,即仅在其中一个数组中出现过的元素,推荐使用Set做存在性判断,时间复杂度更低:

const arrayDiffs = (arr1, arr2) => {
  const set1 = new Set(arr1);
  const set2 = new Set(arr2);
  return [
    ...arr1.filter(item => !set2.has(item)),
    ...arr2.filter(item => !set1.has(item))
  ];
}
console.log(arrayDiffs([1, 44, 2, 3, 5], [33, 1, 2, 3, 4, 5])); // 输出 [44, 33, 4]

如果需要兼容不支持Set的运行环境,可以用indexOf实现:

const arrayDiffs = (arr1, arr2) => {
  const onlyArr1 = arr1.filter(item => arr2.indexOf(item) === -1);
  const onlyArr2 = arr2.filter(item => arr1.indexOf(item) === -1);
  return onlyArr1.concat(onlyArr2);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:12:03