关于数组去重


数组去重想必大家在工作当中都碰到过,今天总结一下我的一些方法。

1.判断函数

定义一个findInArr的判断函数,如果有相同的就返回true,不相同就返回false

1
2
3
4
5
6
7
8
9
function findInArr(arr,n){
for(var i=0;i<arr.length;i++){
if(arr[i]==n){
return true;
}
}

return false;
};

然后通过循环遍历

1
2
3
4
5
6
var arr2=[];
for(var i=0;i<arr.length;i++){
if(!findInArr(arr2,arr[i])){
arr2.push(arr[i])
}
}

2.删除自身重复的项

1
2
3
4
5
6
7
8
9
Array.prototype.unique=function(){
for(var i=0;i<this.length;i++){
for(var j=i+1;j<this.length;j++){
if(this[i]==this[j]){
this.splice(j--,1);
}
}
}
};

3.使用indexOf方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Array.prototype.unique=function(){
var n=[];//新的临时数组

for(var i=0;i<this.length;i++){
if(n.indexOf(this[i])==-1){
n.push(this[i]);
}
}
return n;
};
//兼容IE6-8
Array.prototype.indexOf=Array.prototype.indexOf||function(data){
for(var i=0;i<this.length;i++){
if(this[i]==data){
return i;
}
}
return -1;
};

另外一种方法也是使用indexOf方法:

1
2
3
4
5
6
7
8
9
10
11
12
Array.prototype.unique=function(){
var n=[this[0]];//新的临时数组

//从目标数组第2个开始遍历
for(var i=1;i<this.length;i++){
if(this.indexOf(this[i])==i){
//indexOf只返回数组中第一个相同项的索引
n.push(this[i]);
}
}
return n;
};

4.利用json的映射关系去重

要注意数组里面相同内容,但是数据类型不一致的情况,比如11和’11’。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Array.prototype.unique=function(){
var n = {},r=[]; //n为json,r为临时数组
var type='';
for(var i = 0; i < this.length; i++) //遍历当前数组
{
type=typeof(this[i]);
if (!n[this[i]+type]) //如果json中没有当前项
{
n[this[i]+type] = true; //存入json
r.push(this[i]); //把当前数组的当前项push到临时数组里面
}
}
return r;
}