Javascript 递归函数中断
下面的代码对一棵树进行后序遍历。其目的是在调用方法在特定条件下返回false时中断递归(请参见下面的Javascript 递归函数中断,javascript,recursion,tree,Javascript,Recursion,Tree,下面的代码对一棵树进行后序遍历。其目的是在调用方法在特定条件下返回false时中断递归(请参见下面的\u walkTree()) 函数walkPostOrder(树、回调、ctx){ var continueWalk=true; 函数_walk(树、回调、ctx、父函数){ for(var idx=0,length=tree.length;idx0&&continueWalk) _walk.call(this,node.children,callback,ctx,node); continueW
\u walkTree()
)
函数walkPostOrder(树、回调、ctx){
var continueWalk=true;
函数_walk(树、回调、ctx、父函数){
for(var idx=0,length=tree.length;idx0&&continueWalk)
_walk.call(this,node.children,callback,ctx,node);
continueWalk=callback.call(ctx、节点、父节点、树、idx);
继续;
};
console.log(节点);
打破
};
}
_步行(树、回调、ctx);
}
var json=[{text:“root”,子项:[
{id:“id_1”,文本:“node_1”,子项:[
{id:“id_c1”,文本:“node_c1”},
{id:“id_c2”,文本:“node_c2”,子项:[
{id:“id_c2_c1”,文本:“node_c2_c1”},
{id:“id_c2_c2”,文本:“node_c2_c2”},
{id:“id_c2_c3”,文本:“node_c2_c3”},
{id:“id_c3”,文本:“node_c3”}]},
{id:“id_2”,文本:“node_2”}]};
//迭代
(函数_walkTree(){
_调用(这个,json,函数(节点,父节点,兄弟节点,idx){
console.log(node.id);
if(node.id==“id_c2_c2”)返回false;
返回true;
},这个);
})();
我遇到的问题是,continueWalk
标记在被回调设置为false
后返回到true
。其目的是,它应该在该点中断循环,并中断上面递归函数的所有循环
这个提琴演示应该清楚地表明:您在这里覆盖了
continueWalk
:
if(node.children && node.children.length > 0 && continueWalk)
_walk.call(this, node.children, callback, ctx, node);
continueWalk = callback.call(ctx, node, parent, tree, idx);
// ^^^^^^^^^^
您需要检查
continueWalk
的内容,这是之前调用一行代码的结果。您使用了debugger吗?@Slavik谢谢,这就是我发现错误的原因。如果我现在看到的话。谢谢你,尼娜!
if(node.children && node.children.length > 0 && continueWalk)
_walk.call(this, node.children, callback, ctx, node);
continueWalk = callback.call(ctx, node, parent, tree, idx);
// ^^^^^^^^^^