Skip to content

数组去重

Array.includes

js
function removeDuplicates(arr) {
  const list = []
  arr.forEach((item) => {
    !list.includes(item) && list.push(item)
    // [NaN].includes(NaN)  true   
  })
  return list
}
function removeDuplicates(arr) {
  const list = []
  arr.forEach((item) => {
    !list.includes(item) && list.push(item)
    // [NaN].includes(NaN)  true   
  })
  return list
}

Set

js
function removeDuplicates(arr) {
  return [...new Set(arr)]
}
function removeDuplicates(arr) {
  return [...new Set(arr)]
}

hashMap

js
function removeDuplicatesHashMap(arr) {
  const map = {}
  arr.reduce((acc, cur) => {
    if (!acc[cur])
      acc[cur] = cur

    return acc
  }, map)
  return Object.values(map)
}
function removeDuplicatesHashMap(arr) {
  const map = {}
  arr.reduce((acc, cur) => {
    if (!acc[cur])
      acc[cur] = cur

    return acc
  }, map)
  return Object.values(map)
}

两次遍历

js
function removeDuplicates(arr) {
  let list = arr.slice()
  for (let i = 0; i < list.length; i++) {

    for (let j = i + 1; j < list.length; j++) {
      if (list[j] === list[i]) {
        list.splice(j, 1)
        j--
      } else {
        if ((typeof list[i] === 'number' && list[i] !== list[i]) && (typeof list[j] === 'number' && list[j] !== list[j])) {
          list.splice(j, 1)
          j--
        }
      }
    }
  }
  return list
}
function removeDuplicates(arr) {
  let list = arr.slice()
  for (let i = 0; i < list.length; i++) {

    for (let j = i + 1; j < list.length; j++) {
      if (list[j] === list[i]) {
        list.splice(j, 1)
        j--
      } else {
        if ((typeof list[i] === 'number' && list[i] !== list[i]) && (typeof list[j] === 'number' && list[j] !== list[j])) {
          list.splice(j, 1)
          j--
        }
      }
    }
  }
  return list
}