使用Set、Filter结合indexOf、reduce及map可实现javaScript数组去重,基本类型推荐Set,对象数组按属性用Map键值映射,兼容老环境可用filter+indexOf。

在 javascript 中,数组去重是一个常见的需求,尤其是在处理用户输入、接口返回数据或进行数据清洗时。实现数组去重的方法有很多,每种方式适用于不同的场景。下面介绍几种常用且有效的数组去重方法。
使用 Set 去重(最简洁)
Set 是 es6 引入的数据结构,它只存储唯一值,天然适合去重。
这种方法适用于基本类型(如字符串、数字)的数组去重,代码简洁高效。
示例:
const arr = [1, 2, 2, 3, 4, 4, 5]; const unique = [...new Set(arr)]; // 结果:[1, 2, 3, 4, 5]
使用 filter 和 indexOf 去重
通过 filter 配合 indexOf,保留第一次出现的元素。
立即学习“Java免费学习笔记(深入)”;
该方法兼容性好,适合不支持 Set 的老环境。
示例:
const arr = ['a', 'b', 'a', 'c', 'b']; const unique = arr.filter((item, index) => arr.indexOf(item) === index); // 结果:['a', 'b', 'c']
使用 reduce 实现去重
利用 reduce 累积一个不含重复项的新数组。
这种方式逻辑清晰,便于添加自定义判断条件。
示例:
const arr = [1, 2, 2, 3, 1]; const unique = arr.reduce((acc, curr) => { if (!acc.includes(curr)) { acc.push(curr); } return acc; }, []); // 结果:[1, 2, 3]
对象数组去重(基于属性)
当数组元素是对象时,不能直接用 Set 或 indexOf,需根据某个唯一字段(如 id)去重。
常用方法是使用 Map 按键存储,确保唯一性。
示例:按 id 去重
const users = [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 1, name: 'Alice' } ]; const unique = Array.from(new Map(users.map(item => [item.id, item])).values()); // 结果:两个对象,id 为 1 和 2 各保留一个
基本上就这些。选择哪种方法取决于数据类型和浏览器兼容要求。简单数组优先用 Set,对象数组推荐 Map 键值映射,老项目可用 filter + indexOf。不复杂但容易忽略细节,比如引用类型比较的问题。


