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

