如何在Javascript中递归高效地嵌套循环?

如何在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

我是这个网站的新手,我想你可以帮我做一些我不知道的事情

我需要递归地嵌套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 =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;