JavaScript:数组去重

方法一

双重循环(复杂度较高):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array.prototype.unique = function () {
var ret = [this[0]];
for (var i = 0; i < arr.length; i++){
var repeat = false;
for (var j = 0; j < ret.length; j++){
if (arr[i] === ret[j]){
repeat = true;
break;
}
}
if (!repeat){
ret.push(arr[i]);
}
}
return ret;
};

方法二

先对数组进行排序, 然后比较俩数组一头一尾进行去重:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Array.prototype.unique = function () {
var ret = [this[0]];
this.sort(function (x, y) {
if (x < y){
return -1;
}
else if (x > y){
return 1;
}
return 0;
});
for (var i = 0; i < arr.length; i++){
if (arr[i] !== ret[ret.length - 1]){
ret.push(arr[i]);
}
}
return ret;
};

这种方法虽然降低了复杂度,但由于在去重前进行了排序,所以最后返回的去重结果也是排序后的。如果要求不改变数组的顺序去重,那这种方法便不可取了。

方法三

遍历数组,利用 object 对象保存数组值,判断数组值是否已经保存在 object 中,未保存则 push 到新数组并用 object[arrayItem] = 1 的方式记录保存

1
2
3
4
5
6
7
8
9
10
11
12
Array.prototype.unique = function () {
var ret = [];
var obj = {};
for (var i = 0; i < arr.length; i++){
if (!obj[arr[i]]){
ret.push(arr[i]);
obj[arr[i]] = 1;
}
}
return ret;
};

方法四

利用 indexOf() 方法判断是否存在于新数组中,不存在则 push 到新数组中。

1
2
3
4
5
6
7
8
9
10
Array.prototype.unique = function () {
var ret = [];
for (var i = 0; i < arr.length; i++){
if (ret.indexOf(arr[i]) === -1){
ret.push(arr[i]);
}
}
return ret;
};

方法五

数组下标判断法, 遍历数组,利用 indexOf() 方法判断元素的值是否与当前索引相等,如相等则加入。

1
2
3
4
5
6
7
8
9
10
Array.prototype.unique = function () {
var ret = [];
arr.forEach(function (value, index, arr) {
if (arr.indexOf(value) === index){
ret.push(value);
}
});
return ret;
};
坚持原创技术分享,您的支持将鼓励我继续创作!

热评文章