数组去重想必大家在工作当中都碰到过,今天总结一下我的一些方法。
1.判断函数
定义一个findInArr的判断函数,如果有相同的就返回true,不相同就返回false1
2
3
4
5
6
7
8
9function findInArr(arr,n){
for(var i=0;i<arr.length;i++){
if(arr[i]==n){
return true;
}
}
return false;
};
然后通过循环遍历1
2
3
4
5
6var arr2=[];
for(var i=0;i<arr.length;i++){
if(!findInArr(arr2,arr[i])){
arr2.push(arr[i])
}
}
2.删除自身重复的项
1 | Array.prototype.unique=function(){ |
3.使用indexOf方法
1 | Array.prototype.unique=function(){ |
另外一种方法也是使用indexOf方法:1
2
3
4
5
6
7
8
9
10
11
12Array.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
14Array.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;
}