gpt4 book ai didi

没有生成器的 JavaScript 数组递归

转载 作者:行者123 更新时间:2023-11-28 00:18:11 25 4
gpt4 key购买 nike

如果没有生成器,如何解决以下问题?我在我正在从事的一个需要成对深度迭代的项目中遇到了这样的事情。我只能用生成器来解决这个问题。

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]]];

编辑在@hugomg的帮助下解决了这个问题。当我深入研究时,事实证明我实际上是用与普通数组截然不同的东西来实现这一点的,这一事实阻碍了我。该解决方案实际上非常简单:https://gist.github.com/jclem/fbd44c43cb175dbf880e

最佳答案

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

function iterate(tree, onNum){

var prev = null;

function go(x, onNum){
if(x instanceof Array){
// If you are using a library that provides
// an isArray function it can be more accurate than this.
for(var i=0; i<x.length; i++){
go(x[i], onNum);
}
}else{
onNum(prev, x);
prev = x;
}
}

go(tree, onNum);
}

var myTree = [1, [2, 3, [4, [5, 6], 7], [8, 9, [10], 11]]];
iterate(myTree, function(prev, curr){
console.log(prev, curr);
});

这里不需要使用生成器。仅当您需要将迭代器变成可以“暂停”的外部迭代器时,生成器才会有帮助。例如,如果您需要并行迭代其中两棵树。对于您当前的问题,使用内部迭代器和一些递归就可以了。

关于没有生成器的 JavaScript 数组递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30271101/

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