网站地图    收藏   

主页 > 前端 > javascript >

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

来源:自学PHP网    时间:2014-09-19 14:47 作者: 阅读:

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

例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;
    }
    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);

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论