数组去重最简方法

es6实现:

[...new Set([1,2,3,1,'a',1,'a'])]; //方法一

Array.from(new Set([1,2,3,1,'a',1,'a'])); //方法二

第一个方法里“...”叫做扩展运算符,内部使用for...of循环,所以也可以用于 Set 结构。

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

[...  ]和Array.from( )都是把其他类型转换成数组。

es5实现:

方法一:

[1,2,3,1,'a',1,'a'].filter(function(ele,index,array){
    return index===array.indexOf(ele)
})

 方法二:

Array.prototype.uniq = function () {
    let newarr=[]
    let hasNaN=true
    for(let i=0;i<this.length;i++){
        if(this.indexOf(this[i])===i){
            newarr.push(this[i])
        }
        if(this[i]!=this[i]&&hasNaN){ // 去除NaN,因为NaN!=NaN
            newarr.push(this[i])
            hasNaN=false
        }
    }
    return newarr
}

只有处理了NaN,如下测试用例才能去重成功

[true, false, null, undefined, NaN, 0, 1, {}, {}, 'a', 'a', NaN]

 

 
posted @ 2017-12-14 19:30  方小川  阅读(262)  评论(0编辑  收藏  举报