javascript - JSTree - 为什么递归在 javascript 中停止?
javascript - JSTree - why is recursion stopped in javascript?
我尝试从树中删除一个子树(至少一个节点),所以我构建了一个递归函数:
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);
}
我尝试从树中删除一个子树(至少一个节点),所以我构建了一个递归函数:
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);
}