zoukankan      html  css  js  c++  java
  • js Array数组的去重

    数组的去重

    1、Set结构去重。

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

    let unique= [...new Set(array)];
    //es6 Set数据结构类似于数组,成员值是唯一的,有重复的值会自动去重。
    //Set内部使用===来判断是否相等,类似'1'和1会两个都保存,NaN和NaN只会保存一个
    

    2、遍历,将值添加到新数组,用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。是有问题的,下面那个方法好一点。
    

    3、遍历,将数组的值添加到一个对象的属性名里,并给属性赋值,对象不能添加相同属性名,以这个为依据可以实现数组去重,然后用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"]

    注意:

    这个方法会将 number,NaN,undefined,null,变为字符串形式,因为对象的属性名就是一个字符串,根据需求来吧,想想还是Set去重最简单也最有效。

  • 相关阅读:
    屯【水】题计划
    【BZOJ2157】旅游
    【BZOJ2143】飞飞侠
    【BZOJ1036】[ZJOI2008]树的统计Count
    flask基础
    数据分析之Matplotlib
    pycharm 快捷键
    数据分析之pandas02
    数据分析之pandas01
    隐匿函数,二分法 冒泡排序
  • 原文地址:https://www.cnblogs.com/yongwunaci/p/11640815.html
Copyright © 2011-2022 走看看