You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何将深层嵌套数组完全展开为一维数组?

嵌套数组完全展开的解决方案

问题原因

Array.prototype.flat() 方法默认的展开深度参数为1,仅会处理第一层嵌套数组,无法处理更深层级的嵌套,所以你之前的调用只展开了一层结构。

可选解决方案

1. 直接调用flat传参(最简便,ES2019+环境支持)

给flat()传入参数Infinity,即可实现任意深度的嵌套数组完全展开:

const result = arr.flat(Infinity);

执行后得到的完全展开结果为:
[1,2,3,4,5,6,7,8,9,10,21,22,24,25,26,23,11,12,13,14,15,16,17,18,19,20]

2. 手动递归实现(兼容低版本运行环境)

如果需要兼容不支持ES2019的旧环境,可以自行实现递归逻辑完成展开:

function flatten(arr) {
  let result = [];
  for (const item of arr) {
    if (Array.isArray(item)) {
      result = result.concat(flatten(item));
    } else {
      result.push(item);
    }
  }
  return result;
}
// 调用方法
const result = flatten(arr);

3. 结合reduce简化递归写法

可以用Array.prototype.reduce简化递归逻辑的代码:

const flatten = arr => arr.reduce((prev, curr) => 
  prev.concat(Array.isArray(curr) ? flatten(curr) : curr), 
[]);

4. JSON序列化快速实现(存在使用限制)

如果数组内所有元素都是JSON支持的基础类型(不存在undefined、Symbol、函数、循环引用等场景),也可以用该方法快速实现:

const result = JSON.parse(`[${JSON.stringify(arr).replace(/\[|\]/g, '')}]`);

注意:该方法会丢失不被JSON规范支持的元素类型,仅适合纯基础类型的嵌套数组使用

内容的提问来源于stack exchange,提问作者Digvijay Singh Thakur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:12:01