Javascript中数组查重的方法总结大全

数组查重:简单点说,就是找出数组中重复的元素然后去除,最后得到一个没有重复元素的数组。

// 方法一思路:
    1.构建一个新的数组,用于存放结果。  
    2.for循环中每次从数组取出一个元素,用这个元素与结果数组的中的每个元素相比。  

    3.若结果数组中没有和取出的元素相同,则存放在结果数组中。

//自定义函数
var ret= function(arr){
    var res=[arr[0]];
    for(var j=1;j<arr.length;j++){
        var repeat= false;
        for(var i=0;i<res.length;i++){
           if(arr[j]==res[i]){
               repeat=true;
               break;
           }
        }
        if(!repeat){
           res.push(arr[j]);
        }
    }
    return res;
};
var a=[1,3,4,3,5,'aa','bb','aa'];
document.write(ret(a));  //1,3,4,5,aa,bb

//或者给数组添加方法
Array.prototype.ret= function(){
    var res=[this[0]];
    for(var j=1;j<this.length;j++){
        var repeat= false;
        for(var i=0;i<res.length;i++){
           if(this[j]==res[i]){
               repeat=true;
               break;
           }
        }
        if(!repeat){
           res.push(this[j]);
        }
    }
    return res;
}
var a=[1,3,4,3,5,'aa','bb','aa'];
document.write(a.ret());  //1,3,4,5,aa,bb


//方法二思路:(有点:查重效率高;缺点:由于查重之前对数组进行了排序,还回结果也是排序的,如果不改变原数组的顺序去重,那这种方法便不可取了。)
    1.首先给原数组进行排序。
    2.检查原数组的第i个元素与结果数组的最后一个元素是否相等。因为已经排序,所以重复元素会在相邻位置。
    3.如果不相同,则将该元素存入结果数组中。
//自定义函数
var ret1= function(arr){
    arr.sort();
    var res= [arr[0]];
    for(var i=1;i<arr.length;i++){
       if(arr[i]!=res[res.length-1]){
         res.push(arr[i]);
       }
    }
    return res;   
}
var b= [1,3,4,2,3,4];
document.write(ret1(b));  //1,2,3,4

//或者给数组添加方法
Array.prototype.ret1= function(){
    this.sort();
    var res= [this[0]];
    for(var i=1;i<this.length;i++){
       if(arr[i]!=res[res.length-1]){
         res.push(this[i]);
       }
    }
    return res;   
}
var b= [1,3,4,2,3,4];
document.write(b.ret1());  //1,2,3,4
 

/方法三思路:(推荐使用这个方法)
    1.定义一个结果数组存放结果。
    2.创建一个新对象。
    3.for循环的时候,每次取出一个元素与对象对比,如果这个元素不重复则把它放在结果数组里,同时把这个元素的内容作为对象的属性,并赋值为1。
说明:至于如何对比取出的元素与对象,就是每次从原数组取出一个元素,然后到对象中访问这个属性,如果访问到值,则说明重复。

//自定义函数
var ret2= function(arr){
    var res=[];
    var json={};
    for(var i=0;i<arr.length;i++){
       if(!json[arr[i]]){
          res.push(arr[i]);
          json[arr[i]]=1;
       }
    }
    return res;
}
var c=[1,2,3,2,1];
document.write(ret2(c)); //1,2,3

//或者给数组添加方法
Array.prototype.ret2= function(){
    var res=[];
    var json={};
    for(var i=0;i<this.length;i++){
       if(!json[this[i]]){
          res.push(this[i]);
          json[this[i]]=1;
       }
    }
    return res;
}
var c=[1,2,3,2,1];
document.write(c.ret2()); //1,2,3


PS:如果猿猿们有其他方法,欢迎补充呦!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值