`
lmh2072005
  • 浏览: 111525 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

javascript 数组去重

 
阅读更多
说到数组去重,以前只想到 双重循环来遍历去重  还有利用对象属性无重复性来去重

后来经某位高人的提示 得到下面这个方法 

先排序  排序后再比较第i和第i+i个是否相等 相等则删除 否则则继续  算法确实优化了很多

1.先排序

function ovArr(arr){
    if(arr instanceof Array){
        var newArr = arr.sort();
        for(var i=0;i<newArr.length;i++){  //注意长度每次都要重新算 
            if(newArr[i]===newArr[i+1]){  //注意是 === 
                newArr.splice(i+1,1);
                i--;
            }
        }
        return newArr;
    }else{
        return arr;
    }
}


2.双重循环

a. 删掉元素

function ovArr(arr){
    if(arr instanceof Array){
        for(var i=0;i<arr.length-1;i++){
            for(var j=i+1;j<arr.length;j++){
                if(arr[i]===arr[j]){arr.splice(j,1);j--;}    
            }
        }
    }             
    return arr;
}

b.组成新的

function ovArr(arr){
    if(arr instanceof Array){
        var newArr=[];
        for(var i=0;i<arr.length;i++){    // 注意:i<arr.length  因为后面push的是arr[i],最后一项也要
            var tag=true;
            for(var j=i+1;j<arr.length;j++){
                if(arr[i]===arr[j]){tag=false;break;}    
            }
            if(tag){
                newArr.push(arr[i]);  //
            }
        }
        return newArr;
    }             
    return arr;
}

效率没删除元素的好

3.对象属性无重复性:

function ovArr(arr){
    if(arr instanceof Array){
        var obj={},newArr = [];
        for(var i=0;i<arr.length;i++){
            if(obj[arr[i]+(typeof arr[i])]){      //用typeof 区分类型数字和字符串  比如元素为1和'1'
                continue;
            }else{
                newArr.push(arr[i]);
                obj[arr[i]+(typeof arr[i])] = true;
            }
        }
        return newArr;
    }             
    return arr;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics