JavaScript中数组去重的几种方法

1.使用indexOf方法

      

function unique(arr) {
  let res = []
  for (let child of arr) {
    if (res.indexOf(child) === -1) {
      res.push(child)
    }
  }
  return res
}

该方法对于NaN类型,Symbol等类型无法去重

2..使用includes方法

function unique(arr) {
  let res = []
  for (let child of arr) {
    if (!res.includes(child)) {
      res.push(child)
    }
  }
  return res
}

该方法弊端与方法1类似

3.map方法

创建一个空Map数据结构,遍历需要去重的数组,把数组的每一个元素作为key存到Map中。由于Map中不会出现相同的key值,所以最终得到的就是去重后的结果。

function unique(arr) {
  let map = new Map()
  let res = []
  for (let i = 0; i < arr.length; i++) {
    if (map.has(arr[i])) {
      map.set(arr[i], true)
    } else {
      map.set(arr[i], false)
      res.push(arr[i])
    }
  }
  return res
}

4.使用Set方法,简单快捷

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,用来生成 Set 数据结构。

function unique(arr) {
  return Array.from(new Set(arr))
}

5.filter+indexOf方法

function unique(arr) {
  return arr.filter((item, index) => {
    //判断该元素一次出现的位置和当前位置是否相等,如果相等则返回
    return arr.indexOf(item) === index
  })
}

6.双重循环用splice方法去重

双层循环,外层循环元素,内层循环比较值,值相同时,则删除该值,不建议使用该方法,比较耗性能

function unique(arr) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] === arr[i]) {
        arr.splice(j, 1)
        j--
      }
    }
  }
  return arr
}

猜你喜欢

转载自blog.csdn.net/m0_72838183/article/details/127120806