最简去重方法是用 set + 扩展运算符[...new set(arr)],适用于基本类型;对象数组需按字段(如id)去重,可用filter+map或map缓存;ie兼容需用indexof或includes。

最简实现是用 Set + 扩展运算符:[...new Set(arr)]。
直接用 Set 去重(推荐)
Set 自动忽略重复值,构造后再转回数组即可,代码短、可读性强、兼容性好(ES6+)。
- 适用于字符串、数字等基本类型
- 一行搞定:
const unique = [...new Set([1, 2, 2, 3])]; // [1, 2, 3] - 对对象或数组等引用类型无效(因为比较的是内存地址)
处理对象数组去重
若需按某个字段(如 id)去重,可用 filter + Map 或 reduce:
- 利用 Map 记录已出现的 key:
arr.filter((item, i, a) => !a.slice(0, i).some(v => v.id === item.id)) - 更高效写法:
arr.reduce((acc, cur) => acc.find(x => x.id === cur.id) ? acc : [...acc, cur], []) - 或用 Map 缓存:
Array.from(new Map(arr.map(item => [item.id, item])).values())
兼容老环境(IE)的写法
若需支持 IE,避免使用 Set 和扩展运算符,改用 indexOf 或 includes:
arr.filter((item, index) => arr.indexOf(item) === index)- 注意:该方法对
NaN不友好(indexOf(NaN)返回 -1),而 Set 可正确处理
小提醒
去重逻辑取决于数据类型和业务需求。基本类型优先选 [...new Set(arr)];对象数组则明确去重依据,避免误删。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











