如何实现数组去重
https://zhuanlan.zhihu.com/p/111805723
使用Set
const unique = (arr)=>{
return Array.from(new Set(arr))
}
console.log(unique([1,5,2,3,4,2,3,1,3,4]))
// [1, 5, 2, 3, 4]
或者
const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]
console.log([...new Set(numbers)])
// [2, 3, 4, 5, 6, 7, 32]
map实现数组去重
主要思路:创建一个空 Map,遍历原始数组,把数组的每一个元素作为 key 存到 Map 中,因为 Map 中不会出现相同的 key 值,所以最终得到的 Map 中的所有 key 值就是去重后的结果。
const unique = (arr)=>{
let map = new Map();
let array = new Array(); // 数组用于返回结果
for(let i = 0; i<arr.length; i++){
if(map.has(arr[i])){ // 判断 map 中是否已有该 key 值
map.set(arr[i],true) // 后面的true 代表该key值在原始数组中
}else{ // 如果 map 中没有该 key 值,添加
map.set(arr[i],false)
array.push(arr[i])
}
}
return array
}
let arr = [1,5,2,3,4,2,3,1,3,4]
console.log(unique(arr))
//[1, 5, 2, 3, 4]
indexOf 实现数组去重
const unique = (arr)=>{
if(!Array.isArray(arr)) return
const array = []
for(let i = 0; i<arr.length; i++){ //遍历数组,如果arr的元素在空数组中不存在,返回-1,加到空数组中
array.indexOf(arr[i]) === -1 ? array.push(arr[i]) : array
}
return array
}
const arr = [1,5,2,3,4,2,3,1,3,4]
console.log(unique(arr))
//[1, 5, 2, 3, 4]
优点:ES5常用方法,兼容性高,易于理解
缺点:无法区分NaN,需要特殊处理