数组去重

数组去重是一道面试的经典题型,出现在各大公司的面试题中

思路1:

  复制一个新的数组,用每个元素跟新数组中查找是否存在,不存在则添加入新数组

function unique( arr ){
    var list = [];
    for( var i=0,l = arr.length;i<l;i++ ){
        if( list.indexOf(arr[i]) == -1 ){
            list.push(arr[i])
        }
    }        
    return list
}

思路2:

  给数组排序,排序之后比较前后两个值,相同则去除上一个,继续比较,循环之后将数组中的空值去掉

function unique( arr ){
    var list = [];
    arr.sort(function(a,b){return a>b});
    for( var i=0,l = arr.length-1;i<l;i++ ){
        if( arr[i] == arr[i+1] ){
            arr[i] = undefined
        }
    }
    for( var i=0,l = arr.length;i<l;i++ ){
        if( arr[i] !== undefined ){
            list.push(arr[i])
        }
    }     
    return list
}

  代码可以把两次循环精简成一次

function unique( arr ){
    var list = [];
    arr.sort(function(a,b){return a>b});
    list.push(arr[0])
    for( var i=1,l = arr.length;i<l;i++ ){
        if( arr[i] > list[list.length-1] ){
            list.push(arr[i])
        }
    }
    return list
}

思路3:

  需要选择一种合适的哈希算法,将对象转化为唯一值来做比较

function unique( arr ){
    var obj = {},list = [];
    for( var i = 0,length = arr.length;i<length;i++ ){
        var hash_value = 哈希算法(arr[i])
        if( !(hash_value in obj) ){
            obj[hash_value] = true;
            list.push(arr[i])
        }
    }
    return list
}

 

posted @ 2018-01-12 20:49  十一云子  阅读(96)  评论(0编辑  收藏  举报