gpt4 book ai didi

Javascript - 用于展平数组的递归/for 循环

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:31:30 24 4
gpt4 key购买 nike

所以,这里有一个解决数组展平问题的示例解决方案。我的问题不是“如何”展平数组。相反,我试图理解此递归中发生的一些底层功能。

此解决方案遍历原始数组的每个元素,分解任何数组元素,方法是通过函数将它们放回原处,直到它们不再是数组并且可以被推送到新数组。

我的问题是,“for”循环如何跟踪元素通过函数放回的所有时间,并继续循环它正在处理的“原始”数组的其余部分时间?它必须以某种方式保持跟踪,否则每当一个元素是一个数组并放回原处时,当前循环就会被缩短。希望我的问题是有道理的。

function steamrollArray(array) {
var flatArray = [];

flatten(array);

function flatten(array) {
for (var i = 0; i < array.length; i++) {
if (Array.isArray(array[i])) {
flatten(array[i]);
} else {
flatArray.push(array[i]);
}
}
}

return flatArray;
}
steamrollArray([1, [2], [3, [[4]]]]);

最佳答案

我认为会有更好的答案,但是这里...

至少,不要将其视为“打破”循环,而应将其视为继续按程序顺序执行代码。因此,从循环的上下文内部,它调用自己作为一个函数,当该函数完成时,它继续循环。示例

var item = [1, [2, 3], 4]

flatten(item) 的执行将是:

Loop 1: 
Push 1
Loop 2:
Start a call to flatten with [2, 3]
Loop 1:
push 2
Loop 2:
push 3
End loop
Loop 3:
Push 4
End Loop.

关键是,它只是执行一系列步骤。它不必“记住”它在哪里,当函数返回时,javascript 只是继续从调用函数的地方继续处理。

您不妨回顾一下call stacks .

关于Javascript - 用于展平数组的递归/for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37105824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com