对象数组去重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
var array = [
{ id: 1, name: "张三"},
{ id: 2, name: "李四"},
{ id: 3, name: "张龙"},
{ id: 4, name: "赵虎"},
{ id: 5, name: "王朝"},
{ id: 1, name: "刘金刚"},
{ id: 6, name: "马汉"},
]

var obj = {};

/*
* 方法一 reduce函数
* 按照id 相同进行去重
*/
array = array.reduce(function (item, next) {

obj[next.id] ? '' : obj[next.id] = true && item.push(next);

return item;
}, []);

console.log(array) // 去重后数组

/*
* 方法二 es6写法
* 按照传入属性 进行去重
*/

var array2 = [
{ id: 1, name: "张三"},
{ id: 2, name: "李四"},
{ id: 3, name: "张龙"},
{ id: 4, name: "赵虎"},
{ id: 5, name: "王朝"},
{ id: 1, name: "刘金刚"},
{ id: 6, name: "马汉"},
]

/**
* arr:要去重的数组
* attr: 去重根据的属性
*/
function unique(arr, attr) {
const res = new Map();
return arr.filter((item) => {

var attrItem = item[attr]
return !res.has(attrItem) && res.set(attrItem, 1)

})
}

console.log(unique(array2, "id")) // 去重后数组