数组去重

Posted 十一云子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组去重相关的知识,希望对你有一定的参考价值。

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

思路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
}

 

以上是关于数组去重的主要内容,如果未能解决你的问题,请参考以下文章

C/C++系列数组去重代码实现

C/C++系列数组去重代码实现

C/C++系列数组去重代码实现

用最简短的代码搞定数组去重

php 多个 一维数组 去重 组成新数组

ES6 - 一条代码实现数组去重