Skip to content

数组去重

  1. 使用计数排序的思路,缺点是只支持字符串
javascript
var uniq = function (a) {
  var map = {}
  for (let i = 0; i < a.length; i++) {
    let number = a[i]
    if (typeof number === 'undefined') { continue }
    if (number in map) { continue }
    map[number] = true
  }
  const result = []
  for(let key in map) {
    result.push(parseInt(key))
  }
  return result
}
  1. 使用Set(面试已经禁止这种了,因为太简单)
javascript
// 写法1
var uniq = function (a) {
  return Array.from(new Set(a))
}
// 写法2
var uniq = function (a) {
  return [...new Set(a)]
}
  1. 使用Map,缺点是兼容性差了
javascript
var uniq = function (a) {
  var map = new Map()
  for(let i = 0; i < a.length; i++) {
    let number = a[i]
    if (typeof number === 'undefined') { continue }
    if (map.has(number)) { continue }
    map.set(number, true)
  }
  return [...map.keys()]
}
javascript
/**
 * @description 数组去重,指定对应key
 */
var uniq = function (arr, key)  {
  return [...new Map(arr.map(item => [item[key], item])).values()];
}
  1. reduce + include
javascript
var uniq = function (arr) {
  return arr.reduce((pre, cur) => {
    return pre.include(cur) ? pre : [...pre, cur]
  }, [])
}