gpt4 book ai didi

javascript - JSTree - 为什么递归在 javascript 中停止?

转载 作者:行者123 更新时间:2023-12-03 01:59:21 28 4
gpt4 key购买 nike

我尝试从树中删除一棵子树(至少一个节点),因此我构建了一个递归函数:

function remove(i)
{
tree = $('#jstree-tree').jstree(true).get_json('#', {flat:true});
j=0;
console.log(tree);
while(j<tree.length)
{
if(tree[i].id == tree[j].parent)
{
remove(j);
j--;
}
j++;
}

tree.splice(i,1);
}

但这里的问题是递归在第一次调用后停止,我不知道为什么 this my code .

最佳答案

现在j是一个全局变量,因为声明时没有var。因此j的值会影响remove()的其他执行。

j=0; 更改为 var j=0; 可以解决此问题,但会导致无限循环。看来 remove() 的递归阻止了 tree 值到 $('#jstree-tree') 的反射。为了避免此问题,请在递归的外部执行 tree = ...get_json(...) 并重用它。

这是工作代码:

function remove(arg)
{
tree = $('#jstree-tree').jstree(true).get_json('#', {flat:true});
var _remove = function (i) {
var j = 0;
while(j < tree.length)
{
if(tree[i].id == tree[j].parent)
{
_remove(j);
j--;
}
j++;
}
tree.splice(i,1);
}
_remove(arg);
}

关于javascript - JSTree - 为什么递归在 javascript 中停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50109928/

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