JavaScript多维数组降维核心是将嵌套结构拍平为一维数组,常用方法包括flat()(推荐现代环境)、reduce+concat(兼容旧浏览器)、递归实现及扩展运算符组合使用,并需注意空项、null、undefined等特殊值处理。

JavaScript 中处理多维数组降维,核心是把嵌套结构“拍平”成一维数组。常用方法有原生 API(如 flat())、递归、reduce + concat,以及借助扩展运算符。选哪种取决于兼容性要求和嵌套深度是否固定。
用 flat() 快速降维(推荐现代环境)
flat() 是最直观的内置方法,支持指定展开深度:
-
arr.flat(1):只展开一层(默认值) -
arr.flat(2):展开两层 -
arr.flat(Infinity):彻底扁平化,不管多少层嵌套
例如:[[1, 2], [3, [4, 5]], 6].flat(Infinity) → [1, 2, 3, 4, 5, 6]
兼容老浏览器?用 reduce + concat 模拟
在不支持 flat() 的环境(如 IE 或旧版 Node.js),可用 reduce 遍历 + concat 合并:
- 一层降维:
arr.reduce((acc, val) => acc.concat(val), []) - 深度降维(递归版):对每个元素判断是否为数组,是则递归展开,否则直接推入
示例递归实现:function flatten(arr) {<br> return arr.reduce((acc, val) =><br> Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), []);<br>}
用扩展运算符(...)配合 flat() 或 递归
扩展运算符本身不降维,但常和其它方法组合使用:
- 替代
concat:比如[...acc, ...val]替代acc.concat(val) - 配合递归:在递归函数中用
[...flatten(val)]展开子数组
注意:扩展运算符对非数组(如字符串、类数组)也会展开,使用时需确保数据类型可控。
小心陷阱:空项、null、undefined 和稀疏数组
flat() 会自动跳过空槽(sparse array 中的 empty slot),但不会过滤 null 或 undefined:
-
[1, , 3].flat()→[1, 3](空位被丢弃) -
[1, null, [2, undefined]].flat(Infinity)→[1, null, 2, undefined]
如需同时清理空值,可链式调用 filter(Boolean),但注意这也会去掉 0、''、false 等 falsy 值,按需取舍。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











