如何实现无维度限制的多维数组遍历函数并生成值的深度
解决任意维度多维数组的遍历与深度记录问题
嘿,这个问题我熟!你现在用的多层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);
代码说明
- 递归逻辑:
currentDepth参数记录当前元素的深度,默认值设为1(对应最外层元素),每进入一层子数组,深度自动加1。 - 遍历方式:用
for...of循环替代传统的索引循环,代码更简洁,还能避免原函数中未声明循环变量导致的全局作用域污染问题。 - 终止条件:当子数组长度为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
相关产品推荐
相关产品推荐

