flat()是ES2019新增数组方法,用于按指定深度展平嵌套数组:不传参默认展一层;传数字控制层数;传Infinity彻底扁平;传非正数返回原数组副本;自动跳过空位,不修改原数组。

flat() 是 ES6 为数组新增的原生方法,专门用于将嵌套的多维数组按指定深度“拉平”,生成一个新数组,不修改原数组。
flat 的基本用法和 depth 参数
它接收一个可选参数 depth,表示要展开的嵌套层数:
- 不传参或传
1:只展开第一层嵌套,比如[1, [2, 3], [[4]]].flat()→[1, 2, 3, [4]] - 传具体数字:如
.flat(2)会递归展开两层,[1, [2, [3]]].flat(2)→[1, 2, 3] - 传
Infinity:彻底扁平化,无论多少层都变成一维数组,[1, [2, [3, [4]]]].flat(Infinity)→[1, 2, 3, 4] - 传非正数(如
0、-1):等价于不展开,返回原数组副本
flat 自动跳过数组空位
如果原数组存在空位(如 [1, 2, , 4]),flat 会直接忽略这些空位,不会转成 undefined:
[1, 2, , 4, [5]].flat() → [1, 2, 4, 5]常见搭配与实用技巧
-
配合扩展运算符处理二维数组:虽然
[].concat(...arr)可模拟flat(1),但flat更语义清晰、写法更简洁 -
替代手写递归函数:过去需用
reduce + concat + Array.isArray或递归遍历,现在一行.flat(Infinity)就能搞定任意深度 -
与 flatMap 联用:先对每个元素做映射(如转成子数组),再自动展开一层,适合“映射+降维”场景,例如:
[2, 3].flatMap(x => [x, x * 2])→[2, 4, 3, 6]
注意点:flat 不处理非数组项
它只对数组类型的元素进行展开,其他值(字符串、对象、null、undefined)保持原样。例如:[1, [2], "hello", [3, [4]]].flat(2) → [1, 2, "hello", 3, 4],其中 "hello" 不会被拆解。


















