flatmap是javascript中先映射后展平一层的原生数组方法,语义清晰、性能优于map+flat(1),适用于嵌套数组展平、树形结构扁平化、一对多映射过滤及嵌套数据聚合等场景。

flatMap 是 JavaScript 中一个非常实用的数组方法,它把 map 和 flat(1) 合并成一步:先对每个元素执行映射函数,再将返回的结果自动“展开一层”,特别适合处理嵌套结构并需要转换的场景。
flatMap 的基本用法
语法:arr.flatMap(callback),其中 callback 接收当前元素、索引和原数组,返回一个数组(或任意值)。
关键点:
- 如果回调返回的是数组,
flatMap会把它“摊平一层”; - 如果返回的是非数组值(如字符串、数字、对象),会被当作单个元素放入结果中;
- 它等价于
arr.map(...).flat(1),但性能略优,且只展开一层。
展平嵌套数组的典型例子
比如有一个二维数组,想提取所有子数组中的偶数:
const matrix = [[1, 2], [3, 4, 5], [6]]; const evens = matrix.flatMap(sub => sub.filter(n => n % 2 === 0)); // 结果:[2, 4, 6]
注意:这里 filter 返回的是数组,flatMap 自动把多个子数组拼成一个一维数组。
和 map + flat 的对比
下面两种写法效果相同,但 flatMap 更简洁:
// 写法一:map + flat arr.map(x => [x, x * 2]).flat(); <p>// 写法二:flatMap(推荐)<br> arr.flatMap(x => [x, x * 2]);</p>
如果嵌套超过两层(比如三维数组),flatMap 默认只展平一层,需要多次调用或改用 flat(Infinity)。
常见注意事项
使用时要注意:
- 空数组或
undefined元素不会报错,但回调里要确保返回有效内容; - 不能直接展平深层嵌套(如
[[[1, 2]]]),需配合递归或多次flatMap; - 不修改原数组,返回新数组;
- 不支持稀疏数组的“空位”保留,会跳过(和
map行为一致)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











