数组去重是面试中经常被问到的问题,下面我们就来手写一下数组去重的几种方式
数组去重(数组里面只有原始类型)
Set(利用Set的特性不包含重复的元素)
let arr = [1,1,2,2,3,3,'a','b']
let newArr = Array.from(new Set(arr))
indexOf 与 lastIndexOf(根据下标判断是否不重复来判断元素是否重复)
let arr = [1,1,2,2,3,3,'a','b']
let newArr = []
for(let item of arr) {
if(arr.indexOf(item) === arr.lastIndexOf(item)) {
newArr.push(item)
}
}
includes(新创建一个数组,判断新数组是否存在当前遍历的元素,不存在就push进去,存在就不push进去)
let arr = [1,1,2,2,3,3,'a','b']
let newArr = []
for(let item of arr) {
if(!newArr.includes(item)) {
newArr.push(item)
}
}
filter 和 indexOf实现去重
let arr = [1,1,2,2,3,3,'a','b']
let newArr = arr.filter((item, index, arr) => {
return arr.indexOf(item) === index
})
reduce 和 indexOf实现去重
let arr = [1,1,2,2,3,3,'a','b']
let newArr = arr.reduce((pre,item) => {
if(!pre.includes(item) => {
pre = pre.push(item)
})
}, [])
数组去重(包含对象)
filter,includes 结合 JSON.stringfy一起去重(JSON.strigfy把对象转换成json格式,然后进行判断是否重复)
let arr = [{a:1, b:1},{a:1,b:1},1,1,2,2,{name:'tx'},{name:'tx'}]
let transformArr = []
let newArr = arr.filter(item => {
if(item instanceof Object) {
let str = JSON.stringify(item)
if(!transformArr.includes(str)) {
transformArr.push(str)
return true
}
return false
}
else {
if(!transformArr.includes(item)) {
transformArr.push(item)
return true
}
return false
}
})