面试-手写数组去重

209 阅读1分钟

常见面试题-数组去重的实现

暴力遍历,indexOf

Array.prototype.deduplicate = function(array) {
  let result = []
  for(var i = 0; i < array.length; i++) {
    if(result.indexOf(array[i]) === -1) {
      result.push(array[i])
    }
  }
  return result
}

let a = [1,2,3,4,2,3,4]
console.log(a.deduplicate(a)) // [1,2,3,4]

index 另一种思路

Array.prototype.deduplicate = function(array) {
   return array.filter((item, index) => array.indexOf(item) === index)
}

let a = [1,2,3,4,2,3,4]
console.log(a.deduplicate(a))

reduce

Array.prototype.deduplicate = function(array) {
  return array.reduce((prev, cur) => {
    return prev.includes(cur) ? prev : [...prev, cur]
  }, []) // 提供reduce初始值
}

let a = [1,2,3,4,2,3,4]
console.log(a.deduplicate(a))

map

Array.prototype.deduplicate = function(array) {
  let result = [], current = new Map()
  for(var i = 0; i < array.length; i++) {
    if(current.get(array[i]) === undefined) {
      current.set(array[i], 0)
      result.push(array[i])
    }
  }
  return result
}

let a = [1,2,3,4,2,3,4]
console.log(a.deduplicate(a)) // [1,2,3,4]

set

Array.prototype.deduplicate = function(array) {
  return Array.from(new Set(array))
}

let a = [1,2,3,4,2,3,4]
console.log(a.deduplicate(a)) // [1,2,3,4]