程序员想法

JS数组去重面试总结

2020-12-27  本文已影响0人  Splendid飞羽
let arr = [1, 2, 2, 3, 4, 5];

方法一:使用es6的Set结构去重, Array.from可以将Set结构转化为普通数组

推荐指数:五颗星

let uniqeArr1 = (arr) => {
    return Array.from(new Set(arr));
}
uniqeArr1(arr);

方法二:使用indexOf去重,利用indexOf只会查找第一次的索引值

推荐指数:四颗星

let uniqeArr2 = (arr) => {
    let res = [];
    for (let i = 0; i < arr.length; i++) {
        if (res.indexOf(arr[i]) < 0) {
            res.push(arr[i]);
        }
    }
    return res;
}
uniqeArr2(arr);

方法三:使用es6的filter去重,原理也是利用indexOf只会查找第一次的索引值

推荐指数:四颗星

let uniqeArr3 = (arr) => {
    return arr.filter((item, index) => {
        return arr.indexOf(item) == index;
    })
}
uniqeArr3(arr);

方法四:使用哈希去重,利用对象健值的唯一性向数组push不重复的值

推荐指数:三颗星

let uniqeArr4 = (arr) => {
    let res = [],
        hash = {};
    for (let i = 0; i < arr.length; i++) {
        if (!hash[arr[i]]) {
            res.push(arr[i]);
            hash[arr[i]] = true;
        }
    }
    return res;
}
uniqeArr4(arr);

方法五:方法四的变种,使用es6中的Map结构去重, 此处也可以使用Set结构,set.add添加即可

推荐指数:三颗星

let uniqeArr5 = (arr) => {
    let res = [],
        map = new Map();
    for (let i = 0; i < arr.length; i++) {
        if (!map.has(arr[i])) {
            res.push(arr[i]);
            map.set(arr[i], true);
        }
    }
    return res;
}
uniqeArr5(arr)
上一篇 下一篇

猜你喜欢

热点阅读