如何在Javascript中递归高效地嵌套for循环
How to nest for loops recursively and efficiently in Javascript?
我刚来这个网站,我觉得你可以帮我解决一些我不明白的问题。
我需要递归地嵌套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;
}
}}
但是以递归的方式!我尝试这样做,其中nb是递归的数量。
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;
}
问题是,我怎么能做同样的事情,我在我的第一个代码,但在一个递归的方式,所以我可以选择层次的数量,我的树!正如你所看到的,我尝试了函数link6,但没有设法获得良好的结果....我还是个初学者。
非常感谢!
第一个技巧:使用forEach
.
var array = [];
getAnswers(mot, seuil).forEach(function(jarr) {
return getAnswers(jarr).forEach(function(karr) {
return getAnswers(karr).forEach(function(larr) {
var arraytemp = [mot, jarr, karr, larr];
print(arraytemp);
array.push(arraytemp);
});
});
});
正如Paul S.在他的评论中指出的那样,你可能并不打算在所有其他分支中使用continue
。
回答你最初的问题,我想你在寻找这样的东西:
/* Assumes that n >= 1 and depth(arr) > n */
function ndeep(arr, n, fn) {
function helper(acc, n) {
arr.forEach(function(narr) {
var nacc = acc.slice();
nacc.push(narr);
if (n == 1) {
return fn(nacc);
} else {
return helper(nacc, n - 1);
}
});
}
return helper([], n);
}
var array = [];
ndeep(getAnswers(mot, seuil), depth, function(acc) {
array.push([mot].conat(acc));
});
…其中depth
为所需深度
相关文章:
- 嵌套 For 循环以重置单选组
- 基于 Javascript 的嵌套 for 循环以及对象
- 获取嵌套 for 循环中的值 - node.js、javascript、redis、Q 库
- Javascript中嵌套for循环与数组函数的性能
- javascript在数组过滤器中嵌套for循环
- javascript 中带有表输出的嵌套 for 循环的问题
- Javascript中简单嵌套for循环的问题
- 嵌套For循环传递变量
- 为什么我的嵌套for循环中的代码没有被执行?
- 嵌套for循环和备用映射方法
- 在嵌套for循环中添加属性会导致每个父for循环的值相同
- 我怎样才能在不让第一个循环循环到第二个循环的情况下嵌套for循环呢?
- 嵌套for循环中的变量定义
- 如果element.getAttribute('class')发生变化,则退出嵌套for循环
- 如何用函数式风格实现嵌套For循环
- 数据绑定点击不工作在Chrome嵌套for循环
- Coffeescript翻译-嵌套for循环
- 嵌套for循环MongoDB中的Javascript异步
- 在对象中循环,并在数组中循环的嵌套for循环
- Javascript : 省略 在嵌套 For 循环中初始化