A-A+

js去除数组中的重复项几种方法

2016年10月14日 编程技术 暂无评论

本文章总结了三种去除数组中的重复的方法,最好的属于最下面的,有需要的朋友可参考。

例1,利用双重复制来一个个判断然后删除,代码如下:

  1. <script type="text/javascript">  
  2. <!--  
  3.     Array.prototype.distinct = function() {  
  4.         var ret = [];  
  5.         for (var i = 0; i < this.length; i++) {  
  6.          for (var j = i+1; j < this.length;) {  
  7.              if (this[i] === this[j]) {  
  8.                  ret.push(this.splice(j, 1)[0]);  
  9.              } else {  
  10.                  j++;  
  11.              }  
  12.          }  
  13.         }  
  14.         return ret;  
  15.     }  
  16.     var haha=[1,"6",2,3,4,5,6,7,7,6,6,6];  
  17.     alert(haha.distinct()+"|"+haha);  
  18. -->  
  19. </script>  

但是这个函数中使用了2个for循环,当数组数据多的情况下,效率肯定不行,下面我百度找到一个可以去除一个循环的办法,代码如下:

  1. <script type="text/javascript">  
  2. <!--  
  3.     Array.prototype.distinct=function(){  
  4.         var tempobj={},temparr=[];  
  5.         for(var i=0,items;(items=this[i])!=null😉  
  6.         {  
  7.             if(tempobj[items]!==items)  
  8.             {  
  9.                 tempobj[items]=items;  
  10.                 i++;  
  11.             }  
  12.             else  
  13.             {  
  14.                 temparr.push(this.splice(i,1)[0]);  
  15.             }  
  16.         }  
  17.         return temparr;  
  18.     }//xiaohuboke.com  
  19.     var haha=[1,"6",2,3,4,5,6,7,7,6,6,6];  
  20.     alert(haha.distinct()+"|"+haha);  
  21. -->  
  22. </script>  

可以看出结果是一样的,但是少了一个for循环,多了一个临时对象tempobj,效率肯定是大大提升了。原理就是把数组的值存入tempobj的属性及属性值,如果tempobj的属性值等于数组的值,就把该值从数组中删除并添加到temparr中。

最推荐的一种方法,代码如下:

  1. function getnorepeat() {  
  2. return arguments[0].join('‖').match(/(b[^‖]+b)(?!.*‖1b)/ig);  
  3. }  
  4. var tmparr = [1, 'a', 'ab', 'abc', 'd', 1.2, 'a+b', 'd', 'e', 5, 'www.111cn.net', 1, 'h', 'c', 'ab'];  
  5. var retarr = getnorepeat(tmparr);  
  6. alert(retarr);  
标签:

给我留言