几种常见的数组去重方法

274 阅读1分钟

几种常见的数组去重方法

概述

去除数组中重复的元素(原始值、对象)

解答
const source = [
  1, 1, 2, 3, 4, 5, 6, 7, 8, 9, '', '', 's', 'str', 'str', '1', '0', '0', NaN, undefined, undefined, NaN, null, null, new Number(1), new Number(11), new Number(11), new String('javascript'), new String('javascript')
]
// 方法一 filter (对NaN、对象无效)
const result = []
source.forEach(value => {
  if (result.filter(target => target === value).length === 0) {
    result.push(value)
  }
})
// 方法二 indexOf (对NaN、对象无效)
const result = []
source.forEach(item => {
  if (result.indexOf(item) === -1) {
    result.push(item)
  }
})
// 方法三 sort (对NaN、对象无效)
const result = []
source.sort().forEach((value, index) => {
  if (index === 0 || source[index - 1] !== value) {
    result.push(value)
  }
})
// 方法四 indexOf + filter (对对象无效,NaN被清除)
const result = source.filter((value, index, array) => {
  return array.indexOf(value) === index
})
// ES6 (对对象无效)
const result = Array.from(new Set(source))
// 处理对象 (通吃)
const result = {}
source.filter((value, item, array) => {
  return result.hasOwnProperty(typeof value + value) ? false: (result[typeof value + value] = value)
})