手写数组去重

77 阅读1分钟

1.使用 Set(面试已经禁止这种了,因为太简单)

var a1 =[1,2,2,3,3,4,5,3,5,4,6,6,5,7]
var uniq = function(a){
  return Array.from(new Set(a))
}
uniq(a1)  // [1, 2, 3, 4, 5, 6, 7]
  1. 使用计数排序的思路,缺点是只支持字符串
var uniq = function(a){
  var map = {}
  for(let i=0;i<a.length;i++){
    let number = a[i]
    if(number === undefined){continue}
    if(number in map){continue}
    map[number] = true
  }
  const result = []
  for(let key in map){
    result.push(key)
  }
  return result
}
uniq(a1)  // ['1', '2', '3', '4', '5', '6', '7']
  1. 使用 Map,缺点是兼容性差了一点
var uniq = function(a){
  var map = new Map()
  for(let i=0;i<a.length;i++){
    let number = a[i] // 1 ~ 3
    if(number === undefined){continue}
    if(map.has(number)){
      continue
    }
    map.set(number, true)
  }
  return [...map.keys()]
}
uniq(a1)  // [1, 2, 3, 4, 5, 6, 7]