数组去重

73 阅读2分钟

分享以下几种数组去重的方法:

1.使用空数组遍历待去重的数组,如果待去重的数组索引第一次出现的数字不在新数组中,则添加到新数组里面

79ea0320409772365cd1e792d92f00b.png

2.稍微复杂一点的

 var arr = [1, 1, 34, 56, 34, 56, 123, 1, 34];
      var newarr = []; //去重后新的数组
      for (var i = 0, len1 = arr.length; i < len1; i++) {
        var flag = 1; //标记
        //arr的一项和所有的newarr里面的数组项进行比较
        for (var j = 0, len2 = newarr.length; j < len2; j++) {
          if (arr[i] === newarr[j]) {
            //满足条件,新数组里面存在。不需要的
            flag = 2;
            break;
          }
        }
        //如果到这里flag=1,不满足上面的if判断,新数组不存在,需要的
        if (flag === 1) {
          newarr.push(arr[i]);
        }
      }
      console.log(arr);
      console.log(newarr);

3.filter配合indexOf

4f38acf281c34be6ef4b54af7ba0fd3.png

4.splice

  var arr = [1, 1, 34, 56, 34, 56, 123, 1, 34];
      for (var i = 0, len = arr.length; i < len; i++) {
          for (var j = i+1, len = arr.length; j < len; j++) {
              if (arr[i] === arr[j]) {
                  arr.splice(j, 1);//当前位置删除一个,改变原数组
                  j--;//索引归位,splice会改变原数组。
              }
          }
      }

5,还可以使用正则

  var arr = [1, 1, 34, 56, 34, 56, 123, 1, 34];
      for (var i = 0; i < arr.length; i++) {
          for (var j = i + 1; j < arr.length; j++) {
              if (arr[i] === arr[j]) {
                  arr[j] = '*';
              }
          }
      }
      var newarr = arr.join('#').replace(/\*/g, '').replace(/\#+/g, ',').split(',').filter(function (v) {
          return +v;
      });
      var newarr1 = [];
      for (let value of newarr) {
          newarr1.push(+value)
      }
      console.log(arr);
      console.log(newarr1);

6.使用 Set

let arr = [1, 5, 2, 3, 4, 2, 3, 1, 3, 4]
const unique = (array) => {
    return [...new Set(array)]
    //或者 return Array.from(new Set(array))
}
unique(arr) //[1, 5, 2, 3, 4]

缺点:API太新,旧浏览器不支持;无法去掉重复的{}空对象。

7.最后再来一个JS中数组对象去重的方法

 var arr = [
    {
      key: "01",
      value: "乐乐",
    },
    {
      key: "02",
      value: "博博",
    },
    {
      key: "03",
      value: "淘淘",
    },
    {
      key: "04",
      value: "哈哈",
    },
    {
      key: "01",
      value: "乐乐1",
    },
    {
      key: "02",
      value: "博博",
    },
    {
      key: "03",
      value: "淘淘",
    },
    {
      key: "04",
      value: "哈哈",
    },
  ];

  // 转字符串去重
  let newarr = [];
  let obj = {};
  for (let json of arr) {
    newarr.push(JSON.stringify(json));
  }
  console.log(
    [...new Set(newarr)].map((value) => {
      return JSON.parse(value);
    })
  );

  function test() {
    let map = new Map();
    for (let value of arr) {
      if (!map.has(value.key)) {
        map.set(value.key, value);
      }
    }
    arr = [...map.values()];
    console.log(arr);
  }

  test();