js 2个数组去重
时间: 2025-08-07 16:35:40 AIGC 浏览: 16
### JavaScript 两个数组合并并去重的方法
在 JavaScript 中,可以通过多种方式实现两个数组的合并与去重操作。以下是几种常见的方法及其具体实现:
#### 方法一:使用 `Set` 和 `concat`
通过 `Array.prototype.concat()` 合并数组后,利用 `Set` 数据结构去除重复项,最后再将其转换回数组。
```javascript
let arr1 = [3, 5, 2, 3, 6];
let arr2 = [5, 2, 4, 6, 8, 7, 9, 2];
// 使用 concat 合并数组
let combinedArr = arr1.concat(arr2);
// 利用 Set 去重
let uniqueArr = Array.from(new Set(combinedArr));
console.log(uniqueArr);
```
这种方法简单高效,适用于大多数场景[^1]。
---
#### 方法二:使用扩展运算符 (`...`) 和 `Set`
可以借助 ES6 的扩展运算符来简化语法,同样结合 `Set` 实现去重效果。
```javascript
let arr1 = [3, 5, 2, 3, 6];
let arr2 = [5, 2, 4, 6, 8, 7, 9, 2];
// 扩展运算符合并数组并通过 Set 去重
let uniqueArr = [...new Set([...arr1, ...arr2])];
console.log(uniqueArr);
```
这种方式更加简洁明了,适合现代浏览器环境下的开发需求[^1]。
---
#### 方法三:使用 `filter` 和索引匹配
如果不想引入额外的数据结构(如 `Set`),也可以通过 `filter` 配合 `indexOf` 来手动筛选唯一值。
```javascript
let arr1 = [3, 5, 2, 3, 6];
let arr2 = [5, 2, 4, 6, 8, 7, 9, 2];
// 合并数组
let combinedArr = arr1.concat(arr2);
// 过滤掉重复项
let uniqueArr = combinedArr.filter((item, index) => {
return combinedArr.indexOf(item) === index;
});
console.log(uniqueArr);
```
此方法虽然不依赖于新的数据类型,但在性能上可能不如前两种方案,尤其是在处理大规模数据时[^2]。
---
#### 方法四:针对对象数组的去重逻辑
当涉及的对象数组需要基于特定属性(例如 `id` 字段)进行比较时,则需采用更复杂的策略,比如使用 `reduce` 或者辅助哈希表存储已存在的键值。
```javascript
function removeDuplicates(arr1, arr2, keyField) {
let concatenated = arr1.concat(arr2);
let seenKeys = {};
return concatenated.reduce((accumulator, currentObject) => {
if (!seenKeys[currentObject[keyField]]) {
accumulator.push(currentObject);
seenKeys[currentObject[keyField]] = true;
}
return accumulator;
}, []);
}
let arr1 = [{ id: 3, city: '上海' }, { id: 1, city: '北京' }, { id: 4, city: '成都' }];
let arr2 = [{ id: 1, city: '北京' }, { id: 2, city: '天津' }, { id: 3, city: '上海' }, { id: 5, city: '云南' }];
let result = removeDuplicates(arr1, arr2, "id");
console.log(result);
```
这段代码展示了如何根据指定字段完成复杂类型的数组合并与过滤过程[^3]。
---
### 性能考量
对于简单的数值型或字符串型的一维数组而言,推荐优先选用基于 `Set` 的解法因其执行速度快且易于理解;而面对包含嵌套结构或者自定义实体类别的情况则应考虑定制化算法以满足实际业务规则的要求[^4]。
阅读全文
相关推荐
















