JS两个数组去重
时间: 2025-09-12 15:51:04 AIGC 浏览: 1
在JavaScript中,合并并去重两个数组可以通过多种方式实现,具体取决于数据的结构和性能需求。
### 合并并去重简单数值数组
如果数组中的元素是简单的数值或字符串,可以使用 `Set` 数据结构来高效地去重。`Set` 是一种集合类型,它只允许存储唯一的值。
```javascript
let arr1 = [3, 5, 2, 3, 6];
let arr2 = [5, 2, 4, 6, 8, 7, 9, 2];
let combined = arr1.concat(arr2); // 合并数组
let unique = [...new Set(combined)]; // 去重
console.log(unique); // 输出: [3, 5, 2, 6, 4, 8, 7, 9]
```
### 合并并去重对象数组
当数组中包含对象时,直接使用 `Set` 无法正确去重,因为对象是引用类型。此时可以通过 `filter` 方法结合一个临时的“已见过”对象来实现基于某个属性(如 `id`)的去重。
```javascript
let arr1 = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}];
let arr2 = [{id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}];
let seen = {};
let combined = arr1.concat(arr2);
let unique = combined.filter(item => {
let key = item.id; // 根据 id 去重
if (!seen[key]) {
seen[key] = true;
return true;
}
return false;
});
console.log(unique); // 输出: [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}]
```
### 使用 reduce 方法
`reduce` 方法可以更灵活地处理合并与去重逻辑,特别是在需要根据多个属性进行去重时。
```javascript
let arr1 = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}];
let arr2 = [{id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}];
let combined = arr1.concat(arr2);
let unique = combined.reduce((acc, curr) => {
let exists = acc.some(item => item.id === curr.id);
if (!exists) {
acc.push(curr);
}
return acc;
}, []);
console.log(unique); // 输出: [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}]
```
### 使用第三方库 lodash
如果项目中已经引入了 `lodash` 库,可以使用 `unionBy` 函数来简化操作,该函数可以根据指定的属性返回合并后的新数组。
```javascript
let _ = require('lodash');
let arr1 = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}];
let arr2 = [{id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}];
let unique = _.unionBy(arr1, arr2, 'id');
console.log(unique); // 输出: [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}]
```
### 总结
- 对于**简单数据类型**,推荐使用 `Set`,因为它简洁且性能良好。
- 对于**对象数组**,可以根据对象的唯一标识符(如 `id`)进行去重,使用 `filter` 或 `reduce`。
- 如果项目中已经使用了 `lodash`,可以直接调用 `unionBy` 来简化代码[^1]。
---
###
阅读全文
相关推荐

















