flat专注展平嵌套数组,按depth参数控制层数,默认1层,infinity可彻底扁平;flatmap先映射再扁平一层,等价于map后接flat(1),但更高效,适用于边转换边归并场景。

flat 和 flatMap 是专门用来处理嵌套数组的两个现代方法,一个专注“展平”,一个兼顾“映射+展平”。它们不修改原数组,都返回新数组,语法简洁、语义清晰。
flat:按深度拉平嵌套结构
它只做一件事:把指定层数内的子数组“拆开”,把元素提到上一层。默认只拉平第一层。
- 不传参数(
.flat())等价于.flat(1),只展开最外层嵌套 - 传数字(如
.flat(2))表示最多展开到第 2 层 - 传
Infinity可彻底扁平化任意深度,比如[1, [2, [3, [4]]]].flat(Infinity)→[1, 2, 3, 4] - 会自动跳过空槽(sparse array 中的空位),不会转成
undefined
flatMap:先映射再展平一层
它相当于 map() + .flat(1) 的组合,但更高效——内部一次性完成,不生成中间数组。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 回调函数必须返回一个数组;返回的每个数组都会被“摊开”并合并到最终结果中
- 只展平一层,不管回调返回的数组本身是否还嵌套更深
- 适合边转换边归并的场景,比如把字符串拆成字符、把对象展开为多个条目
- 示例:
[1, 2, 3].flatMap(x => [x, x * 10])→[1, 10, 2, 20, 3, 30]
什么时候选哪个?
看你要不要“加工数据”:
- 纯结构调整(比如后端返回了多层嵌套的菜单/树形数据),用
flat()或flat(Infinity) - 需要对每个元素做操作,且结果是数组(比如分词、展开关联项、过滤后生成多个副本),用
flatMap() - 想展平嵌套数组又懒得写
map().flat(1),flatMap(x => x)就是极简写法
小提醒:兼容性与替代方案
这两个方法是 ES2019 特性,主流浏览器和 Node.js 12+ 均支持。若需兼容旧环境,可用递归或 reduce + concat 模拟 flat;flatMap 则可拆成 map 后接 flat(1)(前提是 flat 已支持)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










