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

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

 

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

 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];
 2                for(var i=0;i<arr.length-1;i++){
 3                        var curItem=arr[i];//当前项
 4                        for(var j=i+1;j<arr.length;j++){
 5                                if(curItem==arr[j]){
 6                                       arr.splice(j,1);
 7                                        j--;
 8                                    }
 9                              }
10                     }
11               console.log(arr);

 

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

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

 1         var arr=[1,3,5,3,5,3,4,6,2,2,2,1];
 2         var len=arr.length;
 3         var obj={};
 4 
 5         for(var i=0;i<len;i++){
 6             var cur=arr[i];//当前项
 7             obj[cur]=cur;
 8         }
 9         var list=[];
10         for(key in obj){
11             list.push(obj[key])
12         }
13         console.log(list);

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

采用另一种方法:方法三

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

 

 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];
 2 
 3         var obj={};
 4         for(var i=0;i<arr.length;i++){
 5             var cur=arr[i];//当前项
 6             if(obj[cur]==cur){
 7                 arr.splice(i,1);
 8                 i--
 9             }else{
10                 obj[cur]=cur;
11             }
12 
13         }
14         obj=null;
15         console.log(arr);

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

 

对方法二封装成方法

 1         var arr=[1,3,5,3,5,3,4,6,2,2,2,1,7,84,34,634];
 2 Array.prototype.arr_unique=function (){
 3     var len=this.length;
 4     var obj={};
 5 
 6     for(var i=0;i<len;i++){
 7         var cur=this[i];//当前项
 8         obj[cur]=cur;
 9     }
10     var list=[];
11     for(key in obj){
12         list.push(obj[key])
13     }
14 
15     return list;
16 
17 };
18 
19 console.log(arr.arr_unique());


对方法三封装成方法

 1                var arr=[1,3,5,3,5,3,4,6,2,2,2,1,7,84,34,634];
 2          Array.prototype.arr_unique=function (){
 3              var obj={};
 4              for(var i=0;i<this.length;i++){
 5                  var cur=arr[i];//当前项
 6 
 7                  if(obj[cur]==cur){
 8                      alert(1111);
 9                      arr.splice(i,1);
10                      i--
11                  }else{
12                      obj[cur]=cur;
13                  }
14              }
15              obj=null;
16              return this;
17              };
18          console.log(arr.arr_unique());

 

posted on 2014-12-20 22:53  七夜哥哥  阅读(1839)  评论(2编辑  收藏  举报

导航