列:下面是一个简单的数组
const arr = [1, 2, 3, 3, ‘abc’, ‘abc’, NaN, NaN, undefined, undefined]
当我们看到这个数组的时候,你第一反应是不是采用set呢,当然,针对该数组可以
1.采用set+Array.from()的方式,比如像下面这样:
注意了,该方法对于NaN也是有效的哦,虽然NaN与NaN不是恒等的,但在set里面认为NaN与NaN相等。
2.利用includes + forEach方法实现
function unique(arr) {
const newArr = []
arr.forEach((item) => {
if(!newArr.includes(item)){ //换成newArr.indexOf(item) === -1不行,因为没法对NaN去重
newArr.push(item)
}
})
return newArr
}
3.利用Map()实现
function unique(arr) {
const map = new Map()
const newArr = []
arr.forEach((item) => {
if(!map.has(item)){
map.set(item,true)
newArr.push(item)
}
})
return newArr
}
4.利用reduce去重
function unique(arr) {
return arr.reduce((prev, cur) => {
return prev.includes(cur) ? [...prev] : [...prev, cur]
},[])
}
5.利用对象实现,其方法和Map()差不多
function unique(arr) {
const obj = {}
const newArr = []
arr.forEach((item) => {
if(!obj[item]){
newArr.push(item)
obj[item] = true
}
})
return newArr
}
好了,今天的分享就到这里!