对象数组去重 js
时间: 2025-07-10 22:11:03 AIGC 浏览: 26
在 JavaScript 中,对对象数组进行去重是一项常见的需求,尤其是在处理复杂数据结构时。由于对象的引用特性,不能直接使用与基本类型数组相同的去重方法。以下是一些实现对象数组去重的方法。
### 使用 `JSON.stringify` 和 `Set`
可以通过将每个对象转换为字符串来比较它们的内容,并利用 `Set` 数据结构来记录已出现的对象字符串表示,从而实现去重。
```javascript
function removeDuplicateObjects(array) {
const seen = new Set();
return array.filter(obj => {
const key = JSON.stringify(obj);
if (seen.has(key)) {
return false;
}
seen.add(key);
return true;
});
}
const array = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 1, name: 'Alice' }];
console.log(removeDuplicateObjects(array)); // 输出: [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' } ]
```
### 使用 Map
另一种方法是使用 `Map` 来存储已经遇到的对象,这种方法可以避免多次调用 `JSON.stringify`。
```javascript
function removeDuplicateObjectsWithMap(array) {
const map = new Map();
return array.filter(obj => {
const key = JSON.stringify(obj);
if (map.has(key)) {
return false;
}
map.set(key, true);
return true;
});
}
const array = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 1, name: 'Alice' }];
console.log(removeDuplicateObjectsWithMap(array)); // 输出: [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' } ]
```
### 自定义属性比较
如果只需要根据特定属性(如 `id`)来判断重复项,则可以自定义比较逻辑。
```javascript
function removeDuplicateObjectsById(array) {
const seen = new Set();
return array.filter(obj => {
if (seen.has(obj.id)) {
return false;
}
seen.add(obj.id);
return true;
});
}
const array = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 1, name: 'Alice' }];
console.log(removeDuplicateObjectsById(array)); // 输出: [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' } ]
```
这些方法可以根据具体的需求选择使用,无论是基于整个对象的内容还是特定属性来进行去重[^1]。
阅读全文
相关推荐

















