
本文介绍如何将二维数组扁平化后合并为一维数组,并自动去除重复元素,使用 flat() 和 Set 实现简洁高效的去重合并。
本文介绍如何将二维数组扁平化后合并为一维数组,并自动去除重复元素,使用 flat() 和 set 实现简洁高效的去重合并。
在 JavaScript 中,当面对形如 [[1, 2], [1, 2, 3]] 的嵌套数组时,若目标是将其“合并为单个无重复元素的一维数组”(即得到 [1, 2, 3]),关键在于两步:扁平化(flatten) + 去重(deduplicate)。
原始代码中使用了 map 配合 Set,但该方式仅对每个子数组单独去重,并未合并——结果为 [[1, 2], [1, 2, 3]](去重后仍为二维),不符合预期。
✅ 正确做法是先用 arr.flat() 将多维数组展平为一维(默认深度为 1,恰好适用于二维场景),再用 [...new Set(...)] 去重并转回数组:
const arr = [ [1, 2], [1, 2, 3] ]; const result = [...new Set(arr.flat())]; console.log(result); // [1, 2, 3]
? 补充说明:
立即学习“Java免费学习笔记(深入)”;
-
flat()支持指定深度(如flat(2)处理三维数组),对于深层嵌套可灵活调整; -
Set自动保证唯一性,且保持首次出现的顺序(ES2015+ 规范保证插入顺序); - 若需兼容旧环境(如 IE),可用
arr.reduce((acc, cur) => acc.concat(cur), [])替代flat(),再结合filter((v, i, a) => a.indexOf(v) === i)去重,但性能与可读性均较低。
⚠️ 注意事项:
-
Set对象对NaN、0和-0的处理符合规范(NaN === NaN为false,但Set视其为相同值;0与-0被视为相等); - 若数组含对象或嵌套结构,
Set无法按值去重(仅按引用),此时需手动实现深比较逻辑。
综上,[...new Set(arr.flat())] 是现代 JavaScript 中最简洁、高效、语义清晰的解决方案。


















