【前端算法】js 实现数组去重

408 阅读1分钟

给定一个数组:[1,6,3,5,2,4,1,2,6,9,12,2];

js 数组去重有很多种方法,但是时间复杂度都不尽相同。除了最基础的暴力破解是 O(n * n) 甚至更高的时复杂度外,我们需要追求的肯定是更加性能优越的解法。

使用 Hash

这是一个时间复杂度为 O(n),的解法,主要是使用了对象属性的不可重复性:

function duplicateRemova (arr) {
    let newArr = [];
    let obj = {};
    let len = arr.length;
    for (let i = 0; i < len; i++) {
        if (!obj[arr[i]]) {
            obj[arr[i]] = 1;
            newArr.push(arr[i]);
        }
    }
    return newArr;
}

ES6 new Set()

ES6 提供了新的数据结构 Set,它的结构类似于数组,但是它的成员都是唯一的,意味着整个数据结构中没有重复的值

function duplicateRemova (arr) {
    let newArr = Array.from(new Set(arr));
    return newArr;
}

暴力破解 时间复杂度 O(n * n)

function duplicateRemova (arr) {
    return arr.filter((item, index, arr) => {
        arr.indexOf(item) === index;
    }) //第一次出现的的元素下标才等于下标
}