使用Set去重是JavaScript中最高效的方法,适用于基本数据类型;对于对象数组则可通过filter配合findIndex按属性去重。

JavaScript 实现数组去重有多种方法,根据数据类型和性能需求可以选择不同的方式。以下是几种常用且实用的方法。
1. 使用 Set 去重(推荐)
ES6 提供了 Set 数据结构,它只存储唯一值,结合扩展运算符可以快速去重,适用于基本数据类型(如字符串、数字)。
const arr = [1, 2, 2, 3, 4, 4, 5];const uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // [1, 2, 3, 4, 5]
这种方法简洁高效,是目前最常用的去重方式。
2. 使用 filter + indexOf
通过遍历数组,利用 indexOf 返回第一个匹配项的索引,判断当前项是否为首次出现。
立即学习“Java免费学习笔记(深入)”;
const arr = [1, 2, 2, 3, 4, 4, 5];const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index);
console.log(uniqueArr); // [1, 2, 3, 4, 5]
兼容性好,适合不支持 Set 的旧环境,但对大数据量性能较差。
3. 使用 reduce 构建唯一数组
利用 reduce 累积一个不含重复值的新数组。
const arr = [1, 2, 2, 3, 4, 4, 5];const uniqueArr = arr.reduce((acc, curr) => {
if (!acc.includes(curr)) {
acc.push(curr);
}
return acc;
}, []);
console.log(uniqueArr); // [1, 2, 3, 4, 5]
逻辑清晰,适合需要在累积过程中处理其他逻辑的场景。
4. 对象数组去重(按某个属性)
如果数组元素是对象,不能直接用 Set 或 indexOf。可以通过属性值来去重,例如使用 filter 配合 findIndex。
const users = [{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 1, name: 'Alice' }
];
const uniqueUsers = users.filter((user, index, self) =>
self.findIndex(u => u.id === user.id) === index
);
console.log(uniqueUsers);
这样可以根据指定字段(如 id)确保对象唯一。
基本上就这些常见方法。简单去重首选 Set,复杂条件可选 filter 或 reduce。根据实际数据结构选择合适方案即可。











