JavaScript数组

数组去重

双层循坏
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var array = [1, 1, '1', '1'];

function unique(array) {
//res用来存储结果
var res = []
for (var i = 0; i < array.length; i++) {
for (var j = 0; j < res.length; i++) {
if (array[i] === res[j]) {
break
}
}
// 如果array[i]是唯一的,那么执行完循环,j等于resLen
if (j === res.length) {
res.push(array[i])
}
}
return res
}

console.log(unique(array)); // [1, "1"]
indexOf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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));
排序后去重

试想我们先将要去重的数组使用 sort 方法排序后,相同的值就会被排在一起,然后我们就可以只判断当前元素与上一个元素是否相同,相同就说明重复,不相同就添加进 res,让我们写个 demo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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));

如果我们对一个已经排好序的数组去重,这种方法效率肯定高于使用 indexOf。

待续···