如何在Javascript中递归高效地嵌套循环?
我是这个网站的新手,我想你可以帮我做一些我不知道的事情 我需要递归地嵌套for循环,并找到一种方法将for循环中心的所有单个叶子的完整路径推入单个数组 换句话说,我需要做一些像如何在Javascript中递归高效地嵌套循环?,javascript,recursion,for-loop,tree,functional-programming,Javascript,Recursion,For Loop,Tree,Functional Programming,我是这个网站的新手,我想你可以帮我做一些我不知道的事情 我需要递归地嵌套for循环,并找到一种方法将for循环中心的所有单个叶子的完整路径推入单个数组 换句话说,我需要做一些像 var link2 = function(node,nb){ var array =[]; //getAnwers returns an array containing the leaves of the node. var array1 = getAnswers(node); for(var j
var link2 = function(node,nb){
var array =[];
//getAnwers returns an array containing the leaves of the node.
var array1 = getAnswers(node);
for(var j =0;j<getAnswers(node).length;j+=2){
var array2 = getAnswers(array1[j]);
for(var k = 0;k<array2.length;k+=2){
var array3 = getAnswers(array2[k]);
for(var l=0;l<array3.length;l+=2){
var arraytemp = [];
arraytemp.push(mot);
arraytemp.push(array1[j]);
arraytemp.push(array2[k]);
arraytemp.push(array3[l]);
array.push(arraytemp);
print(arraytemp);
}
}
} return array;
}
}}
var link2=函数(节点,nb){
var数组=[];
//getAnwers返回一个包含节点叶子的数组。
var array1=getAnswers(节点);
对于(var j=0;j第一个提示:使用
var数组=[];
getAnswers(mot,seuil).forEach(function(jarr){
返回getAnswers(jarr).forEach(函数(karr){
返回getAnswers(karr).forEach(函数(larr){
var arraytemp=[mot,jarr,karr,larr];
打印(arraytemp);
array.push(arraytemp);
});
});
});
正如他在评论中指出的,您可能并不打算在所有其他分支中使用continue
为了回答您最初的问题,我认为您正在寻找以下内容:
/*假设n>=1且深度(arr)>n*/
功能ndeep(arr、n、fn){
功能助手(acc,n){
arr.forEach(功能(narr){
var nacc=附件切片();
nacc推力(narr);
如果(n==1){
返回fn(nacc);
}否则{
返回帮助者(nacc,n-1);
}
});
}
返回helper([],n);
}
var数组=[];
ndeep(获取答案(mot、seuil)、深度、功能(acc){
array.push([mot].conat(acc));
});
…其中depth
是您所需的深度。您在那里进行的if..else
链将永远无法通过第一个else
,因为它将继续循环。请尽量减少示例代码的本地化程度;您使用的函数太多,但尚未定义。此外,var
在循环D中:此外,您可能会发现它们很有用,但请注意它们在IE8-。谢谢您的提示!是的,continue语句是一个错误。我已编辑了我发布的代码,因此它们更容易理解。
var link6 = function(node,nb){
var array = [];
var arraySave = [];
var helper = function(node2,nb,arrayTemp){//pause();
if(nb<=0){
for(var k=0;k<arrayTemp.length;k+=2){
var arrayChain = [];
for(var j=0;j<arraySave.length-1;j++){
arrayChain.push(arraySave[j]);
}
arrayChain.push(arrayTemp[k]);
if(k===arrayTemp.length-2){
arraySave.pop();
arraySave.pop();
}
array.push(arrayChaine);
}
}
else{
var array1 = getAnswers(node2);
for(var i =0;i<array1.length;i+=2){
arraySave.push(array1[i]);
helper(array1[i],nb-1,array1);
return array;
}
}
}
helper(node,nb,null);
return array;