问答详情
源自:7-22 数组排序sort()

如何去掉一个数组重复的元素

如何把一个数组的重复元素去掉

提问者:时光几米 2016-05-13 15:10

个回答

  • 咸鱼有梦
    2016-05-13 17:57:28

    常规思路:循环和 hash

    循环的方法:思路就是:把数组元素搬运到另一数组,搬运过程中检查 元素是否重复,如有,丢弃,没有,加入。

    方法一:虽然是循环,但是效率还可以。思路是 把一个数组搬运到另一新数组,比较 要搬运的数组元素 与 新数组元素的最后一个,看是否相同。

    Array.prototype.delRepeat1=function(){
    //先排序,因为这个方法只是对比 两个元素,n的最后一个元素 与 this[i]
        this.sort();
        var n=[this[0]];
        for(var i=1;i<this.length;i++){
        //注意JS是若类型语言,避免 123 与 "123" 判断为相等,所以此处用 !==
             if(this[i]!== n[n.length -1]) {
             //这一句 用 n[n.length]不行的,原因,我也不知道,希望以后探讨!!!
                 n.push(this[i]);
             } 
        }
        return n;
    }

    方法二:还是循环,这个效率低,因为indexOf()会从头检查数组元素,效率不行

    具体思路差不多,复制数组时 进行比较,检查新数组中是否存在 要插入的那个数组元素

    Array.prototype.delRepeat2=function(){
    //一个新的临时数组
        var n=[];
        for(var i=0;i<this.length;i++){
        // -1 表示n中没有此元素,则把this[i]加入n中
            if(n.indexOf(this[i])==-1)
                n.push(this[i]);
        }
        return n;
    }

    方法三:用indexOf()的另一种方法

    Array.prototype.delRepeat3=function(){
        var n=this[0];
        //对原有数组判断,如果第一次出现的位置与序列号相同,则没有重复,否则有重复
        for(var i=1;i<this.length;i++){
            if(this.indexOf(this[i])==i) {
                 n.push(this[i]);
             }
        }
        return n;
    }

    方法四 hash 这个方法看起来会高级一点

    Array.prototype.delRepeate4 = function(){
    //n为hash表,r为临时数组
        var n={},r=[];
        for(var i=0;i<this.length;i++){
        //如果hash表中没有当前项
            if(!n[this[i]]){
            //存入hash表中
                n[this[i]] =true;
                //把当前数组的当前项push到临时数组中
                r.push(this[i]);
            }
        }
        return r;
    }


  • HxString
    2016-05-13 17:40:55

    var result = [], isRepeated;
         for (var i = 0; i < arr.length; i++) {
             isRepeated = false;
             for (var j = 0; j < result.length; j++) {
                 if (arr[i] == result[j]) {  
                     isRepeated = true;
                     break;
                 }
            }
            if (!isRepeated) {
                result.push(arr[i]);
            }
        }


  • 8859496
    2016-05-13 17:27:51

    for(var i=0; i<arr.length; i++){

        for(var j=i+1; j<arr.length; j++){

            if(arr[i]==arr[j]){

               arr.splice(j,1);

               j--;

            }   

        }

    }


  • 林大大1
    2016-05-13 16:38:23

    var arr = ["1","2", "3","4","5","2","3","8","9","10","11"]
    var.length;
    var num=[];
    for(var i=0; i<lang; i++){
        for(var j=i+1; j<lang; j++){
            if(arr[i]==arr[j]){
                num.push(j)
            }   
        }
    }
    for(var i=num.length-1; i>=0; i--){
        arr.splice(num[i],1)
    }

    感觉应该还有更简便的方法.- -。我是新手-只能写到这..