JS 数组去重

147 阅读1分钟

1.ES6 Set去重

function unique(arr) {
   return Array.from(new Set(arr))
}

2.for for嵌套循环两遍,将重复的通过splice去除

function unique(arr) {
  for(let i = 0; i < arr.length; i++) {
    for(let j = i+1; j < arr.length; j++) {
      if(arr[i] === arr[j]) {
        arr.splice(j, 1) 
      }
    }
  }
  return arr
}

3. indexOf 去重

function unique(arr) {
  let newArr = []
  for(let i = 0; i < arr.length; i++) {
    if(newArr.indexOf(arr[i]) === -1) {
      newArr.push(arr[i])
    }
  }
  return newArr
}

4. 利用sort,前后对比

function unique(arr) {
  arr.sort((a, b) => a-b)
  let newArr = [arr[0]]
  for(let i = 1; i < arr.length; i++) {
    if(arr[i] !== arr[i-1]) {
      newArr.push(arr[i])
    }
  }
  return newArr
}

5. includes

function unique(arr) {
  let newArr = []
  for(let i = 0; i < arr.length; i++) {
    if(!newArr.includes(arr[i])){
      newArr.push(arr[i])
    }
  }
  return newArr
}

6. 利用filter,indexOf

function unique(arr) {
  return arr.filter((item, index, arr) => {
    return arr.indexOf(item) === index
  })
}

7. 数组递归去重

function unique(arr) {
  const len = arr.length
  arr.sort((a, b) => a-b)
  function loop(index) {
    if(index >= 1) {
      if(arr[index] === arr[index-1]) {
        arr.splice(index, 1)
      }
      loop(index-1)
    }
  }
  loop(len-1)
  return arr
}

8. reduce + includes

function unique(arr) {
  return arr.reduce((pre, cur) => {
    return pre.includes(cur) ? pre : [...pre, cur]
  }, [])
}

9. Map

function unique(arr) {
  const map = new Map()
  const array = new Array()
  for(let i = 0; i < arr.length; i++) {
    if(map.has(arr[i])) {
      map.set(arr[i], true)
    }else {
      map.set(arr[i], false)
      array.push(arr[i])
    }
  }
  return array
}