1.使用Set数据结构
const arr = [
{id: 1, name: 'Alice'},
{id: 2, name: 'Bob'},
{id: 1, name: 'Alice'}
];
const uniqueArr = [...new Set(arr.map(item => JSON.stringify(item)))].map(item => JSON.parse(item));
console.log(uniqueArr);
// [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}]
该方法使用map方法将每个对象转换为字符串,使用Set数据结构进行去重,最后使用map方法将字符串转换为对象。
2.使用reduce方法
const arr = [
{id: 1, name: 'Alice'},
{id: 2, name: 'Bob'},
{id: 1, name: 'Alice'}
];
const uniqueArr = arr.reduce((acc, cur) => {
const isExist = acc.find(item => item.id === cur.id);
if (!isExist) {
acc.push(cur);
}
return acc;
}, []);
console.log(uniqueArr);
// [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}]
该方法使用reduce方法对数组进行遍历,如果某个对象的id属性不存在于累加器数组中,则将其添加到累加器数组中。
3.使用filter和findIndex方法
const arr = [
{id: 1, name: 'Alice'},
{id: 2, name: 'Bob'},
{id: 1, name: 'Alice'}
];
const uniqueArr = arr.filter((item, index) => {
return arr.findIndex(obj => obj.id === item.id) === index;
});
console.log(uniqueArr);
// [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}]
该方法使用filter方法过滤数组中第一个出现的对象,并使用findIndex方法查找第一个具有相同id属性的对象的索引。