使用JavaScript处理数组:移除公共元素并添加新元素(遍历array1)
JavaScript 实现数组对称差集(按要求遍历array1)
这里有个完全符合你需求的解决方案,既严格遵循了“遍历array1”的要求,又能正确得到你想要的最终数组:
核心思路
我们需要得到两个数组的对称差集——也就是只在其中一个数组里出现的元素。按照你的要求,核心筛选逻辑基于遍历array1,同时补充处理array2中独有的元素:
- 遍历array1,筛选出那些不存在于array2中的元素
- 遍历array2,筛选出那些不存在于array1中的元素(比如例子里的8)
- 把这两部分结果合并,就是最终的数组
基础实现代码
var array1 = [1,2,3,4,5,6]; var array2 = [3,4,6,8]; // 遍历array1,筛选不在array2中的元素 const uniqueFromArray1 = array1.filter(num => !array2.includes(num)); // 遍历array2,筛选不在array1中的元素(补充这部分才能得到8) const uniqueFromArray2 = array2.filter(num => !array1.includes(num)); // 合并结果 var finalArray = uniqueFromArray1.concat(uniqueFromArray2); console.log(finalArray); // 输出: [1,2,5,8]
性能优化版(适合大数据量)
如果你的数组元素很多,直接用includes会比较慢,因为它每次查找都是线性遍历。我们可以把数组转成Set,利用Set的O(1)查找效率来优化:
var array1 = [1,2,3,4,5,6]; var array2 = [3,4,6,8]; // 转成Set提升查找速度 const setArray1 = new Set(array1); const setArray2 = new Set(array2); // 遍历array1筛选 const uniqueFromArray1 = array1.filter(num => !setArray2.has(num)); // 遍历array2筛选 const uniqueFromArray2 = array2.filter(num => !setArray1.has(num)); var finalArray = uniqueFromArray1.concat(uniqueFromArray2); console.log(finalArray); // 输出: [1,2,5,8]
这样两种实现都满足你的要求,基础版简单直观,优化版更适合处理大规模数据~
内容的提问来源于stack exchange,提问作者Sheena
相关产品推荐
相关产品推荐

