我一直在试图弄清楚如何在javascript中递归地计算嵌套数组的数量,但我似乎无法理解你将如何做到这一点。就像我知道我们将需要在那里使用一个count变量,我们将需要能够访问元素,但我们如何计算每次看到一个新的数组?这里的问题:给定一个嵌套数组,其中每个元素可以是1)整数或2)数组,其元素本身可以是整数或更多数组,计算数组的总数。
我尝试过这种方法,但在判断是否看到了新阵列时,我不知道自己在做什么。
'
function countArrays(array) {
//counting the first array
let sumTotal = 1;
for(let element in array);
if(Array.isArray(array))
sumTotal += countArrays(array)
};
console.log(countArrays([1, 2, 3])) // 1
console.log(countArrays([1, [1, 2, 3], 3])) // 2
'
3条答案
按热度按时间disho6za1#
您需要迭代元素,而不是数组/对象的键。
省略分号,因为这样可以防止下一条语句成为循环的一部分。它只是循环**之后的下一条语句。
然后检查元素是否为数组。
以及使用该项的递归调用的结果。
最后把伯爵还给我。
如果未找到
return
statement,则函数始终返回undefined
。也许用block statement Package 循环和条件的所有语句以获得应用范围的视觉反馈更容易。
pftdvrlh2#
另一种方法是,如果你不知道什么时候使用of循环或者in循环,可以使用一个简单的for循环,我们可以通过获取数组的长度,然后循环,看看数组中的索引是否是一个数组来实现。
rkue9o1l3#
尼娜的回答很棒,它解释了你做错了什么,以及如何改正。
但是如果你想找一个更简单的递归版本,你可以尝试这样做:
但我更愿意提取helper函数
sum
,并将其编写为:(通常我会使用更高效的
reduce
来编写sum
,但既然您正在学习递归,那么看到它的递归版本可能也会很有用。)