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

如何实现无维度限制的多维数组遍历函数并生成值的深度

解决任意维度多维数组的遍历与深度记录问题

嘿,这个问题我熟!你现在用的多层for循环确实只能对付固定嵌套深度的数组,要处理任意维度的话,递归绝对是最靠谱的方案——毕竟递归就是专门用来解决这种嵌套层级不确定的问题的。

先拆解下你的数组结构:每个元素都是[值, 子数组]的形式(比如[0, [...]]或者[1, [2, [3, []]]]),所以我们的递归逻辑可以围绕这个结构来设计:每次拿到一个元素,先记录它的当前深度,再递归处理它的子数组,深度逐层加一即可。

优化后的递归实现

var array = [[0, [[1, [2, [3, []]]],[4, []],[5, [6, []]],[7, [8, [9, []]]],[10, []]]]];

function visitall(arr, currentDepth = 1) {
  // 遍历当前层级的所有元素
  for (const item of arr) {
    // 输出当前值和对应的深度
    console.log(`值: ${item[0]}, 深度: ${currentDepth}`);
    // 如果当前元素存在子数组,递归遍历子数组,深度+1
    if (item[1].length > 0) {
      visitall(item[1], currentDepth + 1);
    }
  }
}

visitall(array);

代码说明

  1. 递归逻辑:currentDepth参数记录当前元素的深度,默认值设为1(对应最外层元素),每进入一层子数组,深度自动加1。
  2. 遍历方式:用for...of循环替代传统的索引循环,代码更简洁,还能避免原函数中未声明循环变量导致的全局作用域污染问题。
  3. 终止条件:当子数组长度为0时,不再递归调用,自然终止遍历。

运行结果示例

执行后会输出每个值对应的深度:

值: 0, 深度: 1
值: 1, 深度: 2
值: 2, 深度: 3
值: 3, 深度: 4
值: 4, 深度: 2
值: 5, 深度: 2
值: 6, 深度: 3
值: 7, 深度: 2
值: 8, 深度: 3
值: 9, 深度: 4
值: 10, 深度: 2

扩展:收集结果而非直接打印

如果需要把结果存储起来供后续使用,可以稍微修改函数,将值和深度存入数组:

function getValuesWithDepth(arr, currentDepth = 1, result = []) {
  for (const item of arr) {
    result.push({ value: item[0], depth: currentDepth });
    if (item[1].length > 0) {
      getValuesWithDepth(item[1], currentDepth + 1, result);
    }
  }
  return result;
}

const values = getValuesWithDepth(array);
console.log(values);

这种递归方式不管数组嵌套多少层,都能自动遍历到每一个值,完美满足无维度限制的需求。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:25:24