
本文介绍如何将二维数组扁平化后合并为单一数组,并自动去除重复元素,使用 flat() 和 Set 实现简洁高效的去重合并。
本文介绍如何将二维数组扁平化后合并为单一数组,并自动去除重复元素,使用 `flat()` 和 `set` 实现简洁高效的去重合并。
在 JavaScript 开发中,常需处理嵌套数组结构(如 [[1, 2], [1, 2, 3]]),并将其“展平 + 去重 + 合并”为一个无重复的一维数组(如 [1, 2, 3])。原始代码中使用 map() 配合 Set 仅对每个子数组单独去重,未实现跨子数组的全局去重,因此输出为 [[1, 2], [1, 2, 3]],不符合预期。
正确做法是分两步:先扁平化,再全局去重。推荐使用现代 JavaScript 的组合方案:
const arr = [ [1, 2], [1, 2, 3] ]; const result = [...new Set(arr.flat())]; console.log(result); // [1, 2, 3]
✅ arr.flat() 将二维数组展开为一维数组 [1, 2, 1, 2, 3];
✅ [...new Set(...)] 利用 Set 自动剔除重复值,并通过扩展运算符转回数组。
⚠️ 注意事项:
-
flat()默认仅展开一层(depth = 1),适用于二维数组;若需处理更深嵌套(如[[[1]], [2, [3]]]),可传参flat(Infinity); -
Set会按插入顺序保留唯一值,因此结果保持首次出现的元素顺序; - 若需兼容旧版浏览器(如 IE),可用
arr.reduce((acc, cur) => acc.concat(cur), [])替代flat(),再结合Set去重; - 对于含对象或数组等引用类型的数据,
Set无法深度去重(因{} !== {}),此时需自定义比较逻辑。
总结:arr.flat().filter((v, i, a) => a.indexOf(v) === i) 也可实现,但性能低于 Set 方案;而 [...new Set(arr.flat())] 是目前最简洁、高效且语义清晰的标准解法。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











