使用 flat(Infinity) 可一次性展平任意深度嵌套数组,返回新数组且跳过空位;不传参或传1仅展开最外层,传0或负数不展开,传具体数字按层数展开。

直接用 Infinity 作为参数即可,不管嵌套多少层,都能一次性展平成一维数组。
flat(Infinity) 是最简方案
当嵌套层数不确定时,不需要先遍历判断深度,也不用写递归逻辑。只要调用 arr.flat(Infinity),JavaScript 引擎会自动递归处理所有层级,直到没有子数组为止。
-
[1, [2, [3, [4]]]].flat(Infinity)→[1, 2, 3, 4] -
[1, [2, 3], [[4, 5], 6, [7, [8]]]].flat(Infinity)→[1, 2, 3, 4, 5, 6, 7, 8]
注意 depth 参数的其他取值含义
理解参数范围有助于避免误用:
- 不传参或传
1:只展开最外层嵌套 - 传
0或负数:等价于不展开,返回原数组(浅拷贝) - 传具体数字如
2、3:按指定层数展开,适合已知结构的场景 - 传
Infinity:无条件全部展开,适用于任意深度
它不会影响原数组,且跳过空位
flat() 总是返回一个新数组,原数组保持不变。另外,如果原数组存在空位(比如 [1, , 3] 中的逗号空缺),flat() 会自动忽略这些空位,而不是转成 undefined。
-
[1, , [2, , 3]].flat(Infinity)→[1, 2, 3] - 但要注意:
''、null、undefined这些值仍会被保留,只有真正“空位”才被跳过
兼容性提醒
现代浏览器和 Node.js(v12+)都已支持 flat()。若需兼容旧环境,可借助 Babel 转译,或手动实现递归 + concat(),但日常开发中优先用 Infinity 是最稳妥高效的做法。


















