数组去重的方法
数组去重是 JavaScript 开发中常见的需求,不同场景下有不同的实现方式。本文总结了 5 种常用的数组去重方法,包括 Set 适用于基本类型的数据去重,以及 Map 实现的对象数组去重方案,确保数据处理高效、简洁。适合各种开发需求,提升代码质量。
使用 Set(最快最简洁)
适用场景:去重 基本数据类型(数字、字符串)。
const uniqueArray = (arr) => [...new Set(arr)];
// 示例
console.log(uniqueArray([1, 2, 2, 3, 4, 4, 5])); // [1, 2, 3, 4, 5]
使用 filter + indexOf
适用场景:适用于 简单数组,但性能比 Set 差。
const uniqueArray = (arr) => arr.filter((item, index) => arr.indexOf(item) === index);
// 示例
console.log(uniqueArray([1, 2, 2, 3, 4, 4, 5])); // [1, 2, 3, 4, 5]
使用 reduce
适用场景:当 filter 或 Set 不适用时的 替代方案。
const uniqueArray = (arr) => arr.reduce((acc, cur) => acc.includes(cur) ? acc : [...acc, cur], []);
// 示例
console.log(uniqueArray([1, 2, 2, 3, 4, 4, 5])); // [1, 2, 3, 4, 5]
适用于对象数组去重(基于 Map
适用场景:对象数组去重,避免 Set 直接去重导致数据丢失。
const uniqueArray = (arr, key) => {
const map = new Map();
return arr.filter(item => !map.has(item[key]) && map.set(item[key], 1));
};
// 示例
const users = [
{ id: 1, name: "Alice" },
{ id: 2, name: "Bob" },
{ id: 1, name: "Alice" }
];
console.log(uniqueArray(users, "id"));
// [{ id: 1, name: "Alice" }, { id: 2, name: "Bob" }]
ES6 Map 结合 forEach(适合复杂数组)
适用场景:适用于 大数据量去重,比 indexOf 方法性能更好。
const uniqueArray = (arr) => {
const map = new Map();
arr.forEach(item => map.set(item, true));
return [...map.keys()];
};
// 示例
console.log(uniqueArray([1, 2, 2, 3, 4, 4, 5])); // [1, 2, 3, 4, 5]