JavaScript中实现数组去重的多种方法,各有优缺点,适用于不同场景:
- 使用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]
- 使用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)//
- 使用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)
- 使用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)
- 使用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)