JavaScript数组去重

76 阅读1分钟

1. 使用计数排序思路,缺点是只支持字符串

let a1 = [1, 2, 2, 3, 3, 3]
const uniq1 = function (a) {
  let map = {}
  for (let i = 0; i < a.length; i++) {
    let number = a[i]
    if (number === undefined) {
      continue
    } //若数组有undefined
    if (number in map) {
      continue
    }
    map[number] = true
  }
  // map = {1:true,2:true,3:true}
  // return Object.keys(map) //若不给用,则👇
  const result = []
  for (let key in map) {
    result.push(parseInt(key))
  }
  return result
}
//缺点:只支持字符串,若同时有字符串和数字会合二为一。

2. 使用Set

const uniq2 = function (a) {
  return Array.from(new Set(a))
}
const uniq3 = function (a) {
  return [...new Set(a)]
}

3. 使用Map,缺点是兼容性差了点

const uniq4 = function (a) {
  let map = new Map()
  for (let i = 0; i < a.length; i++) {
    let number = a[i]
    if (number === undefined) {
      continue
    } //若数组有undefined
    if (map.has(number)) {
      continue
    }
    map.set(number, true)
  }
  return [...map.keys()]
}
//可以区分字符串 数字 因为map的key可以是数字 字符串
// 唯一缺点是兼容性一般