数组去重

48 阅读1分钟

JavaScript中实现数组去重的多种方法,各有优缺点,适用于不同场景:

  1. 使用Set(es6最简单的方法)

优点:简洁高效
缺点:无法处理对象元素的去重(因为对象引用不同)

const arr = [1,2,3,4,5,4,3,43,6]
const uniqueArr = [...new Set(arr)]
console.log(uniqueArr) // [1, 2, 3, 4, 5, 43, 6]
  1. 使用Map(适合对象去重)

优点:可以基于特定属性去重对象
缺点:代码稍复杂

 const arr =[{id:1},{id:2},{id:4},{id:2}]
 const uniqueArr = [...new Map(arr.map(item=>{
      return [item.id, item]
 })).values()]

 console.log(uniqueArr)//
  1. 使用reduce

优点:函数式编程风格
缺点:性能中等

const arr = [1,3,2,333,4,4,5,5]
const uniqueArr = arr.reduce((res,cur)=>{
   return res.includes(cur)?res:[...res,cur]
},[])
console.log(uniqueArr)
  1. 使用Object(仅限原始值)

优点:性能较好
缺点:会强制转换为字符串,不适合对象

const arr = [1,2,2,3,3,4,5]
const obj = {}
arr.forEach(item=>{
    obj[item] = true
})
const uniqueArr = Object.keys(obj).map(Number)
console.log(uniqueArr)
  1. 使用for循环 + includes/indexOf

优点:兼容性好,逻辑清晰
缺点:性能一般

function unique(arr){
   let result = []
   for(let i = 0;i<arr.length;i++){
  if(!result.includes(arr[i])){
     result.push(arr[i])
  }
}
return result
}
const arr = [1,2,3,4,4,4,4,5]
unique(arr)