javascript数组去重算法

先写出这个问题的所有方法,然后讨论性能问题:

方法1:

js数组去重就是把数组中重复的元素去掉:

Array.prototype.delRepeat=function(){
                var newArray=new Array();
                var len=this.length;
                for (var i=0;i<len ;i++){
                    alert("i:"+i);
                    for(var j=i+1;j<len;j++){
                        if(this[i]===this[j]){
                            j=++i;
                        }
                        alert("j:"+j);
                    }
                    newArray.push(this[i]);
                }
                return newArray;
            }
            arr =[1,1,2,1,3,4,4];
            alert(arr.delRepeat());//2,1,3,4

 我们分析一下上面代码的执行过程

i=0 j=1,2,2,3,4,5,6
i=3 j=4,5,6
i=4 j=5,6
i=5 j=6
结果:2,1,3,4

方法2:

        $(function(){
            Array.prototype.unique = function()
            {
                this.sort();
                //alert(this);
                var re=[this[0]];
                //alert(re);
                for(var i = 1; i < this.length; i++)
                {
                    //arr =[1,1,1,2,2,1,3,4,4];
                    if( this[i] !== re[re.length-1])
                    {
                        re.push(this[i]);
                        alert(re);
                    }
                }
                return re;
            }
            arr =[8,1,1,1,2,2,1,3,4,4];
            alert(arr.unique());
        });

   这个方法的思路是先把数组排序,然后比较相邻的两个值。 排序的时候用的JS原生的sort方法,JS引擎内部应该是用的快速排序吧。 最终测试的结果是此方法运行时间平均是第二种方法的三倍左右,不过比第一种和第三种方法快了不少。

方法3:

        Array.prototype.unique = function(){
            //定义一个零时数组
            var n = [];
            for(var i = 0;i<this.length;i++){
                //如果当前数组的第i已经保存进了临时数组,那么跳过,
                //否则把当前项push到临时数组里面
                if(n.indexOf(this[i]) == -1){
                    n.push(this[i]);
                }
            }
            return n;
        }

 

 

 

 

 

posted @ 2013-02-21 15:53  培哥  阅读(215)  评论(0编辑  收藏  举报