1.使用Set
可以使用Set来实现数组对象的去重,Set是一种不重复元素的集合。我们可以将数组对象中的每个元素转化为一个字符串,然后将这些字符串放入Set中,最后将Set转化为数组即可。
示例代码:
const arr = [
{id: 1, name: 'John'},
{id: 2, name: 'Jane'},
{id: 1, name: 'John'},
{id: 3, name: 'Bob'},
{id: 2, name: 'Jane'}
];
const set = new Set(arr.map(JSON.stringify));
const uniqueArr = Array.from(set).map(JSON.parse);
console.log(uniqueArr);
// Output: [{id: 1, name: 'John'}, {id: 2, name: 'Jane'}, {id: 3, name: 'Bob'}]
2.使用reduce
可以使用reduce方法遍历数组对象,并将每个对象的id属性作为key,将对象本身作为value存储到一个对象中。最后,将这个对象中的value部分转换为数组即可。
示例代码:
const arr = [
{id: 1, name: 'John'},
{id: 2, name: 'Jane'},
{id: 1, name: 'John'},
{id: 3, name: 'Bob'},
{id: 2, name: 'Jane'}
];
const uniqueArr = Object.values(arr.reduce((acc, cur) => {
acc[cur.id] = cur;
return acc;
}, {}));
console.log(uniqueArr);
// Output: [{id: 1, name: 'John'}, {id: 2, name: 'Jane'}, {id: 3, name: 'Bob'}]
3.使用filter
可以使用filter方法遍历数组对象,并通过判断对象的id属性在数组中的位置是否为当前位置,来决定是否保留该对象。
示例代码:
const arr = [
{id: 1, name: 'John'},
{id: 2, name: 'Jane'},
{id: 1, name: 'John'},
{id: 3, name: 'Bob'},
{id: 2, name: 'Jane'}
];
const uniqueArr = arr.filter((item, index, arr) => {
return arr.findIndex(t => t.id === item.id) === index;
});
console.log(uniqueArr);
// Output: [{id: 1, name: 'John'}, {id: 2, name: 'Jane'}, {id: 3, name: 'Bob'}]
4.使用Map也可以实现对数组对象的去重。与使用Set类似,我们可以将每个数组对象中的id属性作为Map中的key,将对象本身作为value存储到Map中。如果遇到重复的key,则更新Map中对应的value值
示例代码:
const arr = [
{id: 1, name: 'John'},
{id: 2, name: 'Jane'},
{id: 1, name: 'John'},
{id: 3, name: 'Bob'},
{id: 2, name: 'Jane'}
];
const map = new Map();
arr.forEach(item => map.set(item.id, item));
const uniqueArr = Array.from(map.values());
console.log(uniqueArr);
// Output: [{id: 1, name: 'John'}, {id: 2, name: 'Jane'}, {id: 3, name: 'Bob'}]