数组去重
一 . ES5环境书写
1 .传统方式(效率不高)
var
data = [1,3,2,1,2];
Array.prototype.unique =
function
(){
for
(
var
i=0,arr=[],len=
this
.length;i<len;i++){
var
item =
this
[i];
if
(arr.indexOf(item) == -1) arr.push(item);
}
return
arr;
};
Array.prototype.indexOf =
function
(n){
for
(
var
i=0,len=
this
.length;i<len;i++){
if
(
this
[i] == n)
return
i;
}
return
-1;
};
console.log(data.unique());
2 .通过模拟map的hash存储方式:效率优于1
var
data = [1,3,2,1,2];
Array.prototype.unique =
function
(){
for
(
var
i=0,r={},n=[],len=
this
.length;i<len;i++){
if
(!r[
this
[i]]){
r[
this
[i]] =
true
;
n.push(
this
[i]);
}
}
return
n;
};
console.log(data.unique());
3.通过indexOf判断数组元素第一次出现的位置是否为当前的位置来实现:效率是2的两倍,推荐使用
var
data = [1,3,2,1,2];
Array.prototype.unique =
function
(){<br>
var
arr = [
this
[0]];<br>
//从第二项开始遍历
for
(
var
i=1,len=
this
.length;i<len;i++){<br>
//如果当前数组元素在数组中出现的第一次位置不是i,说明是重复元素
if
(
this
.indexOf(
this
[i]) == i) arr.push(
this
[i]);
}
return
arr;
};
console.log(data.unique());
二 . ES6环境
通过set数据结构中,物重复的特性来实现:比较推崇
var
data = [1,3,2,1,2];
let
arr = [...
new
Set(data)];
console.log(arr);