如何实现数组去重

127 阅读1分钟

1.set去重(ES6最常用)

  • 优点:代码少
  • 缺点: 1.不能排除空对象{}
function unique(array){
    return Array.from(new Set(array))
}
const arr= [1,5,2,3,4,2,3,1,3,4]
console.log(unique(arr))

2.用两个for循环嵌套,然后splice去重(ES5中最常用)

  • 缺点:NaN和空对象{}不能排除
function unique(array){
    for (let i = 0; i<array.length; i++){
        for (let j = i+1; j<array.length; j++){
            if (array[i] === array[j]){
                array.splice(j,1)
                j--
            }
        }
    }
    return array
}
const arr= [1,5,2,3,4,2,3,1,3,4]
console.log(unique(arr))

3.利用indexOf去重

  • 缺点:NaN和空对象{}不能排除
//创建一个空数组,for循环遍历原数组结果数组中是否有当前遍历出来的元素,如果相同就跳过,如果不相同就push到数组中
function unique(array){
    if (!Array.isArray(array)){
        console.log('type error')
        return
    }
    const arr = []
    for (let i = 0;i<array.length; i++){
        if (arr .indexOf(array[i]) === -1) {
            arr .push(array[i])
        }
    }
    return arr
}
const arr= [1,5,2,3,4,2,3,1,3,4]
console.log(unique(arr))

4.根据sort方法

缺点:不能排除空对象和NaN

//用sort()对数组进行排序,然后遍历排序后的数组,对比相邻的两个元素,如果不相等则将数据push到空数组中
function unique(array){
 if (!Array.isArray(array)){
        console.log('type error')
        return
    }
    array = array.sort()
    let arr = [array[0]]
    for (let i = 0; i<array.length; i++){
        if (array[i] !== array[i-1]){
            arr.push(array[i])
        }
    }
    return arr
}
const arr= [1,5,2,3,4,2,3,1,3,4]
console.log(unique(arr))

5.filter方法

  • 缺点:NaN消失了,空对象{}不能去重
function unique(array){
    return array.filter((item,index,array) =>{
        return array.indexOf(item,0) === index
    })
}
const arr= [1,5,2,3,4,2,3,1,3,4,]
console.log(unique(arr))

6.使用Map方法

  • 空对象不能去重
function unique(array){
    let hasMap = new Map()
    let arr = new Array()
    for (let i = 0; i<array.length; i++){
        if (hasMap.has(array[i])){
            hasMap.set(array[i],true)
        }else {
            hasMap.set(array[i],false)
            arr.push(array[i])
        }
    }
    return  arr
}
const arr= [null,null,1,5,2,3,4,2,3,1,3,4,NaN,NaN,{},{},undefined,undefined]
console.log(unique(arr))