小知识

javascript面试题系列之——javascript数组去重

2018-10-24  本文已影响15人  悦者生存

数组去重面试过的人想必都很熟悉,非常重点的一道题

咱们主要讲一些简单易记的方法以供参考

1.indexOf
我们可以用 indexOf 简化内层的循环:

var array = [1, 1,2,43,2];

function unique(array) {
    var res = [];
    for (var i = 0, len = array.length; i < len; i++) {
        var current = array[i];
        if (res.indexOf(current) === -1) {
            res.push(current)
        }
    }
    return res;
}

console.log(unique(array));

这种方法想必大家都很熟悉吧,但是这种方法很耗性能,每次都得遍历

2.排序后去重

其实我们可以先将数组进行排序,排序以后会有很多相同的值在一起,然后我们把现在的值和上一次的值进行对比,不相同的话就存进去,就可以达到相同的去重的效果

var array = [1, 1,2,43,2];

function unique(array) {
    var res = [];
    var sortedArray = array.concat().sort();
    var seen;
    for (var i = 0, len = sortedArray.length; i < len; i++) {
        // 如果是第一个元素或者相邻的元素不相同
        if (!i || seen !== sortedArray[i]) {
            res.push(sortedArray[i])
        }
        seen = sortedArray[i];
    }
    return res;
}

console.log(unique(array));

3.filter方法
这种方法可以更快速的写出去重方法

var array = [1, 1,2,43,2];

function unique(array) {
    return array.concat().sort().filter(function(item, index, array){
        return !index || item !== array[index - 1]
    })
}

console.log(unique(array));

4.es6的set方法

var array = [1, 2, 1, 1, '1'];

function unique(array) {
    return [...new Set(array)];
}

console.log(unique(array)); // [1, 2, "1"]

是不是很简单

上一篇 下一篇

猜你喜欢

热点阅读