0%

JavaScript数组去重

问题

现在我们有这样的需求,有一个由对象组成的数组,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
let arr = [
{
name: 'Rosi',
age: 26
},
{
name: 'Reid',
age: 24
},
{
name: 'Morgan',
age: 25
},
{
name: 'Morgan',
age: 28
}
];

我们现在想要根据name来去重,也就是删除最后一个对象,怎么办呢?

方法1

使用lodash_.uniqBy():_.uniqBy(arr, 'name)

方法2

自己写一个函数:

1
2
3
4
5
function removeDuplicates(myArr, prop) {
return myArr.filter((obj, pos, arr) => {
return arr.map(mapObj => mapObj[prop]).indexOf(obj[prop]) === pos;
});
}

然后调用即可:removeDuplicates(arr, 'name)