javascript数组去重的三种常用方法,及其性能比较

   在进行数组操作时往往会遇到去掉重复项的问题,下面简单介绍下数组去重的方法,以及其执行效率

 

 方法一
        采用两次循环
        原理:拿当前的和他后面的比,如果后面的有重复的就干掉
        但是我们发现数组最后一项,后面没有东西,那他就不用和后边的比较了,所以我们只要循环arr.length-1次就可以了

        var arr=[1,3,5,3,5,3,4,1,3,5,3,5,3,41,3,5,3,5,3,4,1,3,5,3,5,3,4];
                 for(var i=0;i<arr.length-1;i++){
                       var curItem=arr[i];//当前项
                       for(var j=i+1;j<arr.length;j++){
                               if(curItem==arr[j]){
                                      arr.splice(j,1);
                                       j--;
                                   }
                             }
                    }
              console.log(arr);

此方法运用了了两次循环,给浏览器带来很大压力,次数为数组长度的阶乘。

所以考虑用对象替代(对象的属性名字不会重复)方法二

      var arr=[1,3,5,3,5,3,4,6,2,2,2,1];
        var len=arr.length;
        var obj={};

        for(var i=0;i<len;i++){
            var cur=arr[i];//当前项
            obj[cur]=cur;
        }
        var list=[];
        for(key in obj){
            list.push(obj[key])
        }
        console.log(list);

此方法执行效率较高,但循环使用两次

采用另一种方法:方法三

原理:  循环数组,把数组中的每一项当做obj对象的属性名和属性值存进来,
        但是我们发现如果obj对象中已经存在了这个属性名的话,那就说明数组重复了,那我们删除重复的项

        var arr=[1,3,5,3,5,3,4,1,3,5,3,5,3,41,3,5,3,5,3,4,1,3,5,3,5,3,4];

        var obj={};
        for(var i=0;i<arr.length;i++){
            var cur=arr[i];//当前项
            if(obj[cur]==cur){
                arr.splice(i,1);
                i--
            }else{
                obj[cur]=cur;
            }

        }
        obj=null;
        console.log(arr);    

此方法也运用两次循环,仔细想想还有运用一次实现去重的方法。

 

对方法二封装成方法

var arr=[1,3,5,3,5,3,4,6,2,2,2,1,7,84,34,634];
Array.prototype.arr_unique=function (){
    var len=this.length;
    var obj={};

    for(var i=0;i<len;i++){
        var cur=this[i];//当前项
        obj[cur]=cur;
    }
    var list=[];
    for(key in obj){
        list.push(obj[key])
    }

    return list;

};

console.log(arr.arr_unique());

对方法三封装成方法

        var arr=[1,3,5,3,5,3,4,6,2,2,2,1,7,84,34,634];
         Array.prototype.arr_unique=function (){
             var obj={};
             for(var i=0;i<this.length;i++){
                 var cur=arr[i];//当前项

                 if(obj[cur]==cur){
                     alert(1111);
                     arr.splice(i,1);
                     i--
                 }else{
                     obj[cur]=cur;
                 }
             }
             obj=null;
             return this;
             };
         console.log(arr.arr_unique());    

 

posted on 2014-12-22 16:02  little fat  阅读(249)  评论(0编辑  收藏  举报