js数组去重的多种实现方式

双重for循环依次比较

将结果函数中的元素与原数组中的元素依次比较,重复的元素舍弃,不重复的元素添加仅结果函数。

function removeRepeatArr(arr) {
    const result = [];
    for (let i = 0, len = arr.length; i < len; i++) {
        let isRepeat = false;
        for (let j = 0, _len = result.length; j < _len; j++) {
            if (result[j] === arr[i]) {
                isRepeat = true;
                break;
            }
        }
        if (!isRepeat) {
            result.push(arr[i]);
        }
    }

    return result;
}

const arr = [1, 2, 1, 2, 3, 3, 4, 5];

console.log(removeRepeatArr(arr));
// [ 1, 2, 3, 4, 5  ]

使用hashtable

使用for循环创建hash表

function removeRepeatArr(arr) {
    const result = [];
    const hash = {};
    for (let i = 0, len = arr.length; i < len; i++) {
        if (!hash[arr[i]]) {
            hash[arr[i]] = true;
            result.push(arr[i]);
        }
    }

    return result;
}

const arr = [1, 2, 1, 2, 3, 3, 4, 5];

console.log(removeRepeatArr(arr));
// [ 1, 2, 3, 4, 5 ]

当然也可以用forEach代替for循环

function removeRepeatArr(arr) {
    const result = [];
    const hash = {};
    arr.forEach((item) => {
        if (!hash[item]) {
            result.push(item);
            hash[item] = true;
        }
    });
    
    return result;
}

const arr = [1, 2, 1, 2, 3, 3, 4, 5];

console.log(removeRepeatArr(arr));
// [ 1, 2, 3, 4, 5 ]

使用set去重

function removeRepeatArr(arr) {
    return Array.from(new Set(arr));
}

const arr = [1, 2, 1, 2, 3, 3, 4, 5];

console.log(removeRepeatArr(arr));
// [ 1, 2, 3, 4, 5   ]

posted @ 2021-02-22 11:09  LiuWango  阅读(921)  评论(0编辑  收藏  举报