flat()是es2019引入的原生数组方法,用于按指定深度扁平化嵌套数组:不传参数默认展一层,传数字控制层数,传infinity彻底展平;自动跳过空槽但保留undefined/null;返回新数组,不修改原数组,语义清晰、性能优。

flat() 是 JavaScript 处理嵌套数组最直接的原生方法,不用写递归、不依赖第三方库,一行代码就能把多层结构“压平”。
核心就一条:调用 arr.flat(深度),返回新数组,原数组不变。
flat() 的深度控制
-
不传参数,默认只展开第一层
[1, [2, 3], [4, [5]]].flat() // → [1, 2, 3, 4, [5]]
-
传数字,指定展开几层
[1, [2, [3, [4]]]].flat(2) // → [1, 2, 3, [4]]
-
传
Infinity,彻底展平所有层级[1, [2, [3, [4, 5]]]].flat(Infinity) // → [1, 2, 3, 4, 5]
flat() 自动跳过空槽
遇到稀疏数组(比如 [1, , 3] 中间有空位),flat() 会直接忽略它,不产生 undefined:
[1, , 2, [3, , 4]].flat() // → [1, 2, 3, 4]
注意:它只跳过真正的“空槽”(empty slot),不是 undefined 或 null 元素。
比如 [1, undefined, [2]].flat() 仍会保留 undefined。
常见使用场景
- 清洗 API 返回的嵌套数据(如树形菜单、评论回复链)
- 合并多个子数组结果(如分页请求后拼接数据)
- 配合
flatMap()做映射+展平(比如拆分字符串、生成重复项)
// 拆词并展平
['a b', 'c d e'].flatMap(str => str.split(' '))
// → ['a', 'b', 'c', 'd', 'e']
// 每个数生成自己和两倍,再展平
[1, 2, 3].flatMap(x => [x, x * 2])
// → [1, 2, 2, 4, 3, 6]
兼容性提醒
flat() 和 flatMap() 是 ES2019 特性,IE 完全不支持,旧版 Safari/Android WebView 也可能受限。
生产环境如需兼容,可:
- 引入
core-js等 polyfill - 或用
reduce + concat + Array.isArray手动实现(适合简单场景)
不复杂但容易忽略










