信息发布→ 登录 注册 退出

JavaScript如何实现数组扁平化_怎样处理多层嵌套的数组

发布时间:2025-12-27

点击量:
JavaScript数组扁平化核心是将多层嵌套数组转为一维,可用flat()(如flat(Infinity))、递归+Array.isArray判断或栈模拟递归实现,flat()自动忽略空槽位但保留undefined/null。

JavaScript实现数组扁平化,核心是把多层嵌套的数组(比如 [1, [2, [3, 4]], 5])变成一层结构([1, 2, 3, 4, 5])。现代写法简洁高效,老环境也可兼容处理。

用 flat() 方法最简单

flat() 是 ES2019 引入的原生方法,直接支持指定展开深度:

  • arr.flat(1):只展开一层,适合已知最多嵌套两层的情况
  • arr.flat(Infinity):彻底打平,不管嵌套多少层
  • arr.flat():默认等价于 flat(1)

例如:
[1, [2, [3, [4]]]].flat(Infinity)[1, 2, 3, 4]

递归 + Array.isArray 判断(兼容旧版)

不依赖新 API 时,手动递归是最清晰的思路:

  • 遍历每个元素,如果是数组就递归展开,否则直接推入结果
  • Array.isArray() 准确判断是否为数组(避免误判类数组)

示例代码:

function flatten(arr) {
return arr.reduce((res, item) => {
return res.concat(Array.isArray(item) ? flatten(item) : item);
}, []);
}

用栈模拟递归(避免调用栈溢出)

对超深嵌套(如 10000 层),递归可能爆栈。改用栈结构更稳妥:

  • 把原数组放入栈中
  • 每次弹出一个元素,是数组就将其子项全部压入栈;不是就推入结果数组
  • 直到栈为空

这样不依赖函数调用深度,适合极端场景。

注意空槽位和非数组值

flat() 会自动忽略数组中的空槽位(如 [1, , 3] 的中间空位),但不会过滤 undefinednull。如果需要清理这些值,得额外用 filter(Boolean) 或自定义逻辑。

标签:# javascript  # java  #   # red  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!