多维数组 - 递归 / Javascript 简介

Posted

技术标签:

【中文标题】多维数组 - 递归 / Javascript 简介【英文标题】:Multi Dimensional Array - Introduction to recursion / Javascript 【发布时间】:2019-06-30 01:39:04 【问题描述】:

我正在尝试学习 javascript 中的递归,但我迷路了。理论上很简单,递归就是函数调用自身的时候。

function factorial(x) 
  if (x < 0) return;
  if (x === 0) return 1;
  return x * factorial(x - 1);

factorial(3);

如果我必须遍历一个多维数组。我如何应用递归函数来做到这一点? 我想在不编写多循环的情况下操作这些多维数组。

for (let i = 0; i < points.length; i++) 
    for (let j = 0; j < points.length; j++) 
       for (let k = 0; k < points.length; k++) 
            for (let l = 0; l < points.length; l++) 
                 ...
        
    


let points = ([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

我认为递归函数可以通过划分第一个数组的迭代并自行调用相同的函数直到子数组结束,以最简单的方式解决这个问题。

你能解释一下怎么做吗?

【问题讨论】:

预期结果是什么? 我想对这些数组进行排序(每个数组的 max 、 min、 max[0] 等)。 您想对points 中的每个内部数组进行排序吗? - 1个for循环应该这样做。为什么需要4个嵌套的for循环?您能分享一下points 示例中的期望输出吗? 好的。明白了。所以你认为递归函数不是操作多维数组的捷径吗?谢谢你的建议。 【参考方案1】:

使用 for-in 循环

let points = ([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
for (arr in points)
    for(subarr in arr)
        .........
    

使用 for 循环

let points = ([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
for (let i=0; i<points.length;i++)
    for(let j=0; j<points[i].length;j++)
        .........
    

【讨论】:

【参考方案2】:

您可以编写递归来迭代像这样的多维数组。

var points = [[1, 2], 3, [4, 3], [10, 50], [98, 100]];

    function recursion(array, length = 0) 
        if (array.length === length) return 0;

        if (Array.isArray(array[length])) 
            recursion(array[length]);
        
        console.log(array[length]);

        recursion(array, length + 1);
    
    
    recursion(points);

【讨论】:

以上是关于多维数组 - 递归 / Javascript 简介的主要内容,如果未能解决你的问题,请参考以下文章

js递归(二)——合并多维数组

php无限极分类递归写入多维数组的方法

递归函数和多维数组

在 PHP 中递归创建多维数组

不使用foreach递归遍历多维数组

PHP递归函数将多维数组转换为xml