为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

4 回答

常规思路:循环和 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;
}


0 回复 有任何疑惑可以回复我~
#1

咸鱼有梦

更改一下 用 n[n.length] 是可以的,当时在测试时写错了,后来证明是可以的
2016-05-13 回复 有任何疑惑可以回复我~
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]);
        }
    }


0 回复 有任何疑惑可以回复我~

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--;

        }   

    }

}


0 回复 有任何疑惑可以回复我~

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

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信