javascript 数组去重的9种方式,你知道几种?

123 阅读1分钟

1.for循环、includes方式去重

Array.prototype.unique = function () {

    let newArr = [];

    for (i = 0; i < this.length; i++) {

        if (!newArr.includes(this[i])) {

            newArr.push(this[i]);
        }
    }
    return newArr;
}

2.reduce循环、includes方式去重

 Array.prototype.unique = function () {

    return this.reduce((prev, cur) => {

        if (!prev.includes(cur)) {

            prev.push(cur);
        }
        return prev;

    }, []);
}

3.Set、数组解构方式去重

Array.prototype.unique = function () {

    return [...new Set(this)];

}

4.冒泡法对象去重

Array.prototype.unique = function (key) { 

    for (let i = 0; i < this.length - 1; i++) {

        for (let j = i + 1; j < this.length; j++) {

            if (this[i][key] == this[j][key]) {

                this.splice(j, 1);

                j--;
            }
        }

    }
    return this;
}

5.新建数据双重循环去重

Array.prototype.unique = function (key) {

    let newArr = [];

    for (let i = 0; i < this.length; i++) {

        if (newArr.every(item => {

            return item[key] != this[i][key]

        })) {

            newArr.push(this[i]);
        }
    }

    return newArr;

}

6.对象法去重

Array.prototype.unique = function (key) { 

    let obj = {};
    return this.reduce((prev, cur) => {

        if (!obj[cur[key]]) {

            prev.push(cur);

            obj[cur[key]] = true;
        }
        return prev;

    }, [])
}

7.of循环、Map方式去重

Array.prototype.unique = function (key) {

    let newArr = new Map();

    for (let item of this) {

        if (!newArr.has(item[key])) {

            newArr.set(item[key], item);

        }
    }

    return [...newArr.values()];
}

8.filter循环、Map方式去重

Array.prototype.unique = function (key) {

    let newArr = new Map();

    return this.filter(item => {

        return !newArr.has(item[key]) && newArr.set(item[key], item);

    })

}


👋🏻 写在最后

这里可能列举不全,大家还知道其它的去重方式吗?不妨一起探讨下哈。 初来咋到,点个关注吧,持续分享前端技术知识。