# 数组去重
# 双循环
var array = [1, 1, "1", "1"];
function unique(array) {
// res用来存储结果
var res = [];
for (var i = 0, arrayLen = array.length; i < arrayLen; i++) {
for (var j = 0, resLen = res.length; j < resLen; j++) {
if (array[i] === res[j]) {
break;
}
}
// 如果array[i]是唯一的,那么执行完循环,j等于resLen
if (j === resLen) {
res.push(array[i]);
}
}
return res;
}
console.log(unique(array)); // [1, "1"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# indexOf
var array = [1, 1, "1"];
function unique(array) {
var res = [];
for (var i = 0, len = array.length; i < len; i++) {
var current = array[i];
if (res.indexOf(current) === -1) {
res.push(current);
}
}
return res;
}
console.log(unique(array));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 排序后去重
var array = [1, 1, "1"];
function unique(array) {
var res = [];
var sortedArray = array.concat().sort();
var seen;
for (var i = 0, len = sortedArray.length; i < len; i++) {
// 如果是第一个元素或者相邻的元素不相同
if (!i || seen !== sortedArray[i]) {
res.push(sortedArray[i]);
}
seen = sortedArray[i];
}
return res;
}
console.log(unique(array));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# filter
// indexOf
var array = [1, 2, 1, 1, "1"];
function unique(array) {
var res = array.filter(function(item, index, array) {
return array.indexOf(item) === index;
});
return res;
}
console.log(unique(array));
// 排序
var array = [1, 2, 1, 1, "1"];
function unique(array) {
return array
.concat()
.sort()
.filter(function(item, index, array) {
return !index || item !== array[index - 1];
});
}
console.log(unique(array));
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Object 键值对
var array = [{ value: 1 }, { value: 1 }, { value: 2 }];
function unique(array) {
var obj = {};
return array.filter(function(item, index, array) {
console.log(typeof item + JSON.stringify(item));
return obj.hasOwnProperty(typeof item + JSON.stringify(item))
? false
: (obj[typeof item + JSON.stringify(item)] = true);
});
}
console.log(unique(array)); // [{value: 1}, {value: 2}]
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# es6
// set
function unique(array) {
return [...new Set(array)];
}
// map
function unique(arr) {
const seen = new Map();
return arr.filter(a => !seen.has(a) && seen.set(a, 1));
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10