数组去重

总结数组去重的方法

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
let arr = [
1,
1,
"true",
"true",
true,
true,
15,
15,
false,
false,
undefined,
undefined,
null,
null,
NaN,
NaN,
"NaN",
0,
0,
"a",
"a",
{},
{},
];
console.log(unique(arr));

ES6 的两种方法

1
2
3
4
function unique(arr) {
return Array.from(new Set(arr));
return [...new Set(arr)];
}

indexOf、includes 去重

1
2
3
4
5
6
7
8
9
10
function unique(arr) {
let array = [];
for (let i = 0; i < arr.length; i++) {
if (array.indexOf(arr[i]) === -1) {
// !array.includes(arr[i])
array.push(arr[i]);
}
}
return array;
}

双重循环,splice 去重

1
2
3
4
5
6
7
8
9
10
11
12
function unique(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
//第一个等同于第二个,splice方法删除第二个
arr.splice(j, 1);
j--;
}
}
}
return arr;
}

先 sort() 再一次遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function unique(arr) {
arr = arr.sort();
let i = 0
for (let j = 1; j < arr.length; j++) {
if (arr[i] !== arr[j]) {
if(arr[i] !== arr[j]) {
if(j - i > 1) {
arr[i + 1] = arr[j]
}
i++
}
}
}
return arr.slice(0, i + 1);
}

利用 filter

1
2
3
4
5
function unique(arr) {
return arr.filter((item, index) => {
return arr.indexOf(item) === index;
});
}

reduce

1
2
3
4
5
function unique(arr) {
return arr.reduce((res, item) => {
return !res.includes(item) ? res.concat(item) : res
}, [])
}