数组去重一般来说就这么几种方法,理解代码,记住就好!Map、Set、reduce、filter~
map实现
const arr = [3, 1, 1, 2, 5, 9, 3, 0]
const deduplication1 = arr => {
let map = new Map()
arr.forEach(v => map.set(v, 1))
return [...map.keys()]
};
console.log(deduplication1(arr));
set实现
const arr = [3, 1, 1, 2, 5, 9, 3, 0]
const deduplication1 = arr => {
let map = new Map()
arr.forEach(v => map.set(v, 1))
return [...map.keys()]
};
console.log(deduplication1(arr));
reduce实现(⭐)
const arr = [3, 1, 1, 2, 5, 9, 3, 0]
const deduplication3 = arr => arr.reduce((temp, v) => temp.includes(v) ? temp : [...temp, v], [])
console.log(deduplication3(arr))
filter过滤实现
const arr = [3, 1, 1, 2, 5, 9, 3, 0]
const deduplication4 = arr => arr.filter((val, index) => arr.indexOf(val) === index)
console.log(deduplication4(arr))
上边四种方法都是创建了新的数组来去重,下边这种方法实现了在原数组上去重。
let arr = [3, 0, 0, 1, 1, 2, 3, 3, 3, 5, 5]
function deduplication(arr) {
let hash = {}
for(let i=0; i<arr.length; i++) {
if(!hash[arr[i]]) {
hash[arr[i]] = 1
} else {
arr.splice(i, 1)
i--
}
}
return arr
}
let arr2 = deduplication(arr)
console.log(arr2)
console.log(arr)
console.log(arr === arr2)
网友评论