数组实现并集查找的核心是去重合并,推荐三种方法:①Set+扩展运算符(最简洁);②filter+includes(兼容性好);③reduce+includes(适合多数组)。需注意空值处理、大数据量优化及对象去重的特殊处理。

用数组实现并集查找,核心是去重合并两个或多个数组,保留所有唯一元素。不需要复杂数据结构,纯 JavaScript 数组方法就能高效完成。
理解并集本质:去重 + 合并
数学中集合 A ∪ B 是“属于 A 或属于 B 的所有元素”,不重复。映射到数组,就是把多个数组拼起来,再剔除重复项。
- 重复判断依据是值相等(浅比较),如
1和"1"视为不同,{}和{}视为不同(引用不同) - 若需深比较对象或处理特殊类型(如 NaN、null、undefined),需额外逻辑,基础场景用原生方法足够
三种常用实战写法(推荐按需选用)
✅ 方法一:Set + 扩展运算符(最简洁,ES6+)
const arr1 = [1, 2, 3]; const arr2 = [3, 4, 5]; const union = [...new Set([...arr1, ...arr2])]; // [1, 2, 3, 4, 5]
✅ 方法二:filter + includes(兼容老环境,语义清晰)
const union = [...arr1, ...arr2].filter((item, index, arr) => arr.indexOf(item) === index);
✅ 方法三:reduce + includes(适合动态多数组合并)
const arrays = [arr1, arr2, [5, 6, 7]]; const union = arrays.reduce((acc, curr) => acc.concat(curr.filter(x => !acc.includes(x))) , []);
合并变量集合的典型实战场景
常见于配置合并、权限列表聚合、表单字段去重收集等:
- 权限合并:用户角色权限 + 临时授权权限 → 去重后的最终权限数组
- API 参数聚合:多个来源的筛选标签(如前端筛选器、URL 参数、默认配置)统一去重传给后端
- 状态管理:Vuex/Pinia 中多个模块提交的待处理 ID 列表,需合并为唯一待办集合
注意边界与优化点
实际使用时容易忽略但影响稳定性:
- 空数组或 undefined 入参需提前过滤,避免
concat(undefined)或filter报错 - 大数据量(>10万项)时,
includes时间复杂度 O(n²),建议改用 Set 查找:const seen = new Set(); arr.filter(x => { if (seen.has(x)) return false; seen.add(x); return true; }) - 若数组含对象,需转换为可比键(如
obj.id)再做去重,原生 Set 不识别对象相等性

















