手写数组去重

58 阅读1分钟

方法一:计数排序的思维

let uniq = (a)=>{
    let map = {}
    for (let i = 0; i < a.length; i++) {
        let number = a[i]
        if(number === undefined || number in map){
            continue
        }
        map[number] = true
    }
    return Object.keys(map)
}

缺点:

1.返回的数组元素是字符串的

2.假设数组中有一个字符串1和一个数字1,那么去重后之后剩下一个字符串1

方法二:用Map

let uniq = (a)=>{
    let map = new Map()
    for (let i = 0; i < a.length; i++) {
        let number = a[i]
        if(number === undefined || map.has(number)){
            continue
        }
        map.set(number,true)
    }
    return [...map.keys()]
}

缺点: 不兼容一些老版本的浏览器

方法三:用Set(如果是面试,一般就不允许你用这个方法)

let uniq = (a)=>{
    return Array.from(new Set(a))
}