js数组去重

今天一个同学去面试,面试官问了他一个问题.
js数组如何去重?

使用set

ES6中关键词set结构

let arr = [1, 2, 3, 4, 4, 5, 6, 6];
let uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // 输出:[1, 2, 3, 4, 5, 6]

使用filter和indexOf

let arr = [1, 2, 3, 4, 4, 5, 6, 6];
let uniqueArr = arr.filter((value, index, self) => {
    return self.indexOf(value) === index;
});
console.log(uniqueArr); // 输出:[1, 2, 3, 4, 5, 6]

使用reduce

let arr = [1, 2, 3, 4, 4, 5, 6, 6];
let uniqueArr = arr.reduce((accumulator, current) => {
    return accumulator.includes(current) ? accumulator : [...accumulator, current];
}, []);
console.log(uniqueArr); // 输出:[1, 2, 3, 4, 5, 6]

使用map

let arr = [1, 2, 3, 4, 4, 5, 6, 6];
let uniqueArr = [...new Map(arr.map(item => [item, item])).values()];
console.log(uniqueArr); // 输出:[1, 2, 3, 4, 5, 6]

如果没有这些函数也可以使用for循环来去重,使用传统的 for 循环进行数组去重,可以通过遍历数组并检查元素是否已经存在于一个新的结果数组中来实现。

let array = [1, 2, 2, 3, 4, 4, 5];
let uniqueArray = [];

for (let i = 0; i < array.length; i++) {
    if (uniqueArray.indexOf(array[i]) === -1) {
        uniqueArray.push(array[i]);
    }
}

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