A-A+
	js去除数组中的重复项几种方法
本文章总结了三种去除数组中的重复的方法,最好的属于最下面的,有需要的朋友可参考。
例1,利用双重复制来一个个判断然后删除,代码如下:
- <script type="text/javascript">
 - <!--
 - Array.prototype.distinct = function() {
 - var ret = [];
 - for (var i = 0; i < this.length; i++) {
 - for (var j = i+1; j < this.length;) {
 - if (this[i] === this[j]) {
 - ret.push(this.splice(j, 1)[0]);
 - } else {
 - j++;
 - }
 - }
 - }
 - return ret;
 - }
 - var haha=[1,"6",2,3,4,5,6,7,7,6,6,6];
 - alert(haha.distinct()+"|"+haha);
 - -->
 - </script>
 
但是这个函数中使用了2个for循环,当数组数据多的情况下,效率肯定不行,下面我百度找到一个可以去除一个循环的办法,代码如下:
- <script type="text/javascript">
 - <!--
 - Array.prototype.distinct=function(){
 - var tempobj={},temparr=[];
 - for(var i=0,items;(items=this[i])!=null😉
 - {
 - if(tempobj[items]!==items)
 - {
 - tempobj[items]=items;
 - i++;
 - }
 - else
 - {
 - temparr.push(this.splice(i,1)[0]);
 - }
 - }
 - return temparr;
 - }//xiariboke.net
 - var haha=[1,"6",2,3,4,5,6,7,7,6,6,6];
 - alert(haha.distinct()+"|"+haha);
 - -->
 - </script>
 
可以看出结果是一样的,但是少了一个for循环,多了一个临时对象tempobj,效率肯定是大大提升了。原理就是把数组的值存入tempobj的属性及属性值,如果tempobj的属性值等于数组的值,就把该值从数组中删除并添加到temparr中。
最推荐的一种方法,代码如下:
- function getnorepeat() {
 - return arguments[0].join('‖').match(/(b[^‖]+b)(?!.*‖1b)/ig);
 - }
 - var tmparr = [1, 'a', 'ab', 'abc', 'd', 1.2, 'a+b', 'd', 'e', 5, 'www.111cn.net', 1, 'h', 'c', 'ab'];
 - var retarr = getnorepeat(tmparr);
 - alert(retarr);