美文网首页程序员想法
JS数组去重面试总结

JS数组去重面试总结

作者: Splendid飞羽 | 来源:发表于2020-12-27 16:53 被阅读0次
    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)
    

    相关文章

      网友评论

        本文标题:JS数组去重面试总结

        本文链接:https://www.haomeiwen.com/subject/aavonktx.html