js数组去重

作者: TRYao | 来源:发表于2018-04-12 11:01 被阅读0次
    1. Set结构去重

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

    let arr = [1,2,2,3,4,5,6,6];
    let unique = [...new Set(arr)];
    

    向 Set 加入值的时候,不会发生类型转换,所以5和"5"是两个不同的值。Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),主要的区别是NaN等于自身,而精确相等运算符认为NaN不等于自身。

    1. 遍历,将值添加到新数组,用indexOf()判断值是否存在,已存在就不添加,达到去重效果。
    let a = ['1','2','3',1,NaN,NaN,undefined,undefined,null,null, 'a','b','b'];
    let unique = arr =>{
        let newA = [];
        arr.forEach(key => {
            if( newA.indexOf(key)<0 ){ //遍历newA是否存在key,如果存在key会大于0就跳过push的那一步
                newA.push(key);
            }
        });
        return newA;
    }  
    console.log(unique(a)) ;//["1", "2", "3", 1, NaN, NaN, undefined, null, "a", "b"]
    //ps:这个方法不能分辨NaN,会出现两个NaN。是有问题的,下面那个方法好一点。
    
    1. 遍历,将数组的值添加到一个对象的属性名里,并给属性赋值,对象不能添加相同属性名,以这个为依据可以实现数组去重,然后用Object.keys(对象)返回这个对象可枚举属性组成的数组,这个数组就是去重后的数组。
    let a = ['1', '2', '3', 1,NaN,NaN,undefined,undefined,null,null, 'a', 'b', 'b'];
    const unique = arr => {
        var obj = {}
        arr.forEach(value => {
            obj[value] = 0;//这步新添加一个属性,并赋值,如果不赋值的话,属性会添加不上去
        })
        return Object.keys(obj);//`Object.keys(对象)`返回这个对象可枚举属性组成的数组,这个数组就是去重后的数组
    }
    console.log(unique(a));//["1", "2", "3", "NaN", "undefined", "null", "a", "b"]
    

    相关文章

      网友评论

        本文标题:js数组去重

        本文链接:https://www.haomeiwen.com/subject/iykxkftx.html