数组去重(常用方法)

数组去重常用的七种方法(个人总结)

//实例数组
var
arr = [12, 10, 32, 54, 21, 12, 10, 54]

法一  利用对象属性不会重复的原理 将数组的每一项变成对象的属性  然后查询对象属性 没有 就添加进新数组

var obj = {}
      var brr = []
      for (var i = 0; i < arr.length; i++) {
        if (obj[arr[i]] == undefined) {
          obj[arr[i]] = 1
          brr.push(arr[i])
        } else {
          obj[arr[i]] += 1
        }
      }
      console.log(obj)//可以看到数组元素以及重复的个数
      console.log(brr)//去重之后的数组

法二 利用sort()将重复的放一起  然后使用splice()删掉重复的元素

arr.sort(function (a, b) {
        return a - b
      })
      for (var i = 0; i < arr.length; i++) {
        if (arr[i] == arr[i + 1]) {
          arr.splice(i, 1)
          i--
        }
      }
      console.log(arr)

法三 双循环遍历数组 重复的删掉  注意删除元素之后 要改变下标  es5常用

for (var i = 0; i < arr.length - 1; i++) {
        for (var j = i + 1; j < arr.length; j++) {
          if (arr[i] == arr[j]) {
            arr.splice(j, 1)
            j--
          }
        }
      }
      console.log(arr)

法四 利用forEach()遍历数组 用indexOf()判断是否在新数组 不在就在新数组添加元素

var brr = []
      arr.forEach(function (item) {
        if (brr.indexOf(item) == -1) {
          brr.push(item)
        }
      })
      console.log(brr)

法五 利用forEach()遍历数组 用includes()判断是否在新数组 不在就在新数组添加元素 原理与法四类似

var brr = []
      arr.forEach(function (item) {
        if (!brr.includes(item)) {
          brr.push(item)
        }
      })
      console.log(brr)

法六 利用Set结构不会有重复元素的原理 以及...运算符  es6

var brr = [...new Set(arr)]
      console.log(brr)

法七 利用Set结构不会有重复元素的原理 以及Array.from()方法 与法六原理类似

var brr = Array.from(new Set(arr))
      console.log(brr)

这七种方法个人感觉比较容易想到,当然有的原理比较类似就是换了种方法。网上也有很多去重方法感觉大同小异,大家做个参考就好。

原文地址:https://www.cnblogs.com/wxf-h/p/14791659.html