我一直在学习递归函数,现在对它们有了大概的理解。当我在完成一个自由代码营的挑战时,遇到了这个问题,我不明白它的含义。在for循环中使用递归函数:
function steamroller(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
//If (i)th element is an array
if (Array.isArray(arr[i])) {
newArr = newArr.concat(steamroller(arr[i]));
console.log(newArr);
} else {
newArr.push(arr[i]);
}
}
return newArr;
}
steamroller([1, [2],[3, [[4]]]]);
//returns [1, 2, 3, 4]
我理解困难的那一句是:
newArr = newArr.concat(steamroller(arr[i]));
在这一行中,
newArr
与什么连接起来了?函数在.concat方法内再次被调用,是吗?但是那个for循环会发生什么呢?.concat方法内的函数调用会强制退出循环吗?这里有一个JSFiddle,我已经将每个
newArr
记录到控制台,但我甚至无法跟随它。数组是这样构建的:[1, 2]
[4]
[3, 4]
[1, 2, 3, 4] //Final
感谢您的选择。
arr
的元素是一个数组,就对该数组进行递归调用。因此,newArr
会连接到该元素数组(即arr[i]
)上递归过程返回的结果。 - Hunan RostomyannewArr.concat(steamroller(arr[i]));
将newArr
与steamroller(arr[i])
进行拼接,并返回一个新的数组。这个新数组需要被赋值给一个变量以便使用。 - Nina Scholz