1、 数组元素为基本数据类型
1
2
3
4
5
6
7
8
9
10
11
12const unique = (arrwy) => {
let obj = {}, arr = [];
arrwy.forEach((ele, index) => {
if(obj[ele]){
return
}else{
obj[ele] = '1';
arr.push(ele)
}
});
return arr;
}原理:new一个空对象和一个空数组,遍历原数组,将原数组每一项作为空对象的新增属性,循环过程中,如果目标对象已经包含该属性,则return,否则给该属性取值为1,并把该属性push进空数组。此空数组即为原数组去重后的数组。
2、 数组元素为基本数据类型(es6 Set)
1
[...new Set([1,'1','1',2,1])]
3、 数组元素为对象,且去重标准为其中的某一个属性
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
54const unique = (arrwy,key) => {
let obj = {}, arr = [];
arrwy.forEach((ele, index) => {
if(obj[ele.key]){
return
}else{
obj[ele.key] = '1';
arr.push(ele)
}
});
return arr;
}
```
原理:new一个空对象和一个空数组,遍历原数组,将原数组每一项的指定属性的属性值作为空对象的新增属性,循环过程中,如果目标对象已经包含该属性,则return,否则给该属性取值为1,并把该属性push进空数组。此空数组即为原数组去重后的数组。
* 4、 数组元素为对象,且去重标准为其中的某几个属性
``` bash
//将对象元素转换成字符串以作比较
function obj2key(obj, keys){
var n = keys.length,
key = [];
while(n--){
key.push(obj[keys[n]]);
}
return key.join('|');
}
//去重操作
function uniqeByKeys(array,keys){
var arr = [];
var hash = {};
for (var i = 0, j = array.length; i < j; i++) {
var k = obj2key(array[i], keys);
if (!(k in hash)) {
hash[k] = true;
arr .push(array[i]);
}
}
return arr ;
}
let arr = [{
name: 'aaa',
type: 'shop'
},{
name: 'bbb',
type: 'msg'
},{
name: 'bbb',
type: 'msg'
}];
arr = uniqeByKeys(arr,['name','type']);