flat()是javascript原生数组降维方法,语义清晰、不修改原数组;支持depth参数控制展开层数,可设为1、具体数字、infinity或非正数;自动跳过空位,只展开数组元素;常用于二维转一维、任意深度扁平化及与flatmap配合;需注意es2019兼容性问题。

直接用 flat() 就行,它是 JavaScript 原生提供的数组降维方法,语义清晰、写法简洁,不修改原数组,返回一个新的一维(或指定深度)数组。
flat 的基本用法和 depth 参数
flat() 接收一个可选参数 depth,控制展开嵌套的层数:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 不传参或传
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、-2):等价于不展开,返回原数组的浅拷贝
flat 自动跳过空位,不处理非数组项
如果原数组有空位(sparse array),比如 [1, 2, , 4],flat() 会直接忽略它,不会补成 undefined:[1, 2, , 4, [5]].flat() → [1, 2, 4, 5]
它只对数组类型的元素做展开,其他值保持原样:[1, [2], "hello", [3, [4]]].flat(2) → [1, 2, "hello", 3, 4],其中 "hello" 不会被拆解。
常见实用搭配
- 二维转一维最简写法:
arr.flat(),比[].concat(...arr)更直观、更安全 - 任意深度降维:
arr.flat(Infinity),替代手写递归函数,一行搞定 - 配合
flatMap()实现“映射+降维”:[2, 3].flatMap(x => [x, x * 2])→[2, 4, 3, 6]
注意兼容性问题
flat() 是 ES2019(ES10)标准,IE 完全不支持,旧版 Safari 和部分安卓 WebView 也可能受限。若需兼容老环境,可:
- 使用 Babel + polyfill 自动转译
- 或降级用 reduce + concat + Array.isArray 手写实现
- 对二维数组也可用 [].concat(...arr) 快速替代
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










