前端数组去重方法(唯一化,uniquify)

614 阅读1分钟

以下代码中,参数a代表需要去重的数组。

1. ES6极简版

[... new Set(a)]

2. 无序数组去重(没有排序的步骤)

function uniquify(a) {
    var i = 1;
    while(i < a.length) {
        a.slice(0, i).indexOf(a[i]) >= 0 ? a.splice(i, 1) : i++;
    }
    return a;
}

3. 有序数组去重(数组经过排序)

function uniquify(a) {
    var i = 1;
    a.sort(function(a, b) { return a - b; });
    while(i < a.length) {
        a[i] === a[i - 1] ? a.splice(i, 1) : i++;
    }
    return a;
}

4. 有序数组去重(数组经过排序,减少了删除操作次数,从而优化了时间复杂度)

function uniquify(a) {
    a.sort(function(a, b) { return a - b; });
    var i = 0, j = 0;
    while(++j < a.length) {
        if(a[i] !== a[j]) {
            a[++i] = a[j];
        }
    }
    a.length = Math.min(i + 1, a.length);
    return a;
}