无生成器的JavaScript数组递归

无生成器的JavaScript数组递归,javascript,recursion,Javascript,Recursion,如果没有发电机,如何解决以下问题?在我正在进行的一个项目中,我遇到了类似这样的情况,需要成对进行深入的迭代。我只能用发电机来解决这个问题 nums是一个示例输入。输入是一个任意长度的数组,由整数和其他任意深度的数组组成 以[beforeNum,nextNum]成对迭代nums。这意味着 第一对的第一个值应该是null([null,1])。第二 对应该是[1,2],依此类推。最后一对应该是[10,11] 最终,我的实际目标是能够得到第n个“原子”,不管它有多深。例如,get(nums,6)将是7

如果没有发电机,如何解决以下问题?在我正在进行的一个项目中,我遇到了类似这样的情况,需要成对进行深入的迭代。我只能用发电机来解决这个问题

nums
是一个示例输入。输入是一个任意长度的数组,由整数和其他任意深度的数组组成

以[beforeNum,nextNum]成对迭代
nums
。这意味着 第一对的第一个值应该是
null
[null,1]
)。第二 对应该是
[1,2]
,依此类推。最后一对应该是
[10,11]

最终,我的实际目标是能够得到第n个“原子”,不管它有多深。例如,
get(nums,6)
将是7

const nums = [1, [2, 3, [4, [5, 6], 7], [8, 9, [10], 11]]];

Edit在@hugomg的帮助下找到了答案。当我潜入时,事实证明,我实际上是在用与普通数组不同的东西来实现它,这一点妨碍了我。解决方案实际上非常简单:

我们可以通过在树上进行简单的遍历来解决您的问题,方法是在遍历过程中保留一个“prev”变量。只需编写一个简单的递归:

函数迭代(树,onNum){
var-prev=null;
函数go(x,onNum){
if(数组的x实例){
//如果您使用的库提供
//一个isArray函数,它可以比这个更精确。

对于(var i=0;iIs
nums
样本输入?输入总是在任何深度的一对吗?当然。我不知道为什么我在这方面有这么多麻烦,但这很有道理。我很好奇如何修改它以允许获取第n对。哦,这只是一个简单的倒计时,传递到每个迭代中。用“上一个”。要“出去”一旦你找到你想要的结果,如果更复杂的话。你可以让所有的函数返回一个布尔值,如果递归调用出错,你可以立即退出,或者你可以用黑客的方式提出一个例外,也就是说,把它重构成一个扁平化函数,将树转换成数组,可能会更干净。然后所有的操作都是布尔值你想变得更容易,也就是说,很难做对的是,我基本上需要在循环中迭代这些对,每次都做一些事情。我实际上使用生成器,因为我可以在
for
循环中使用类似的东西来做这件事: