Java脚本递归地添加子节点以无限循环结束

Java Script recursivly adding a child ends in infinite loop

本文关键字:无限循环 结束 子节点 添加 脚本 递归 Java      更新时间:2023-09-26

这是我添加子元素的函数。对于flag,它只会添加子节点一次。如果没有标志,它就会进入无限循环。标志是全局的

function addChildToParent(node, parent, child) {
    if (node.name == parent) {
        node.add(child);
        flag = true;
    }
    else if (flag==false){
        for (i = 0; i < node.children.length; i++) {
            addChildToParent(node.getChild(i), parent, type, child);
        }
    }
}

在这里被调用,smth的长度是3

request.onload = function () {
        var ecs=[];
        for(i=0;i<smth.length;i++){
            ecs[i]= new Node(smth[i],EC);
            flag=false;
            addChildToParent(node,smth[i],ecs[i]);
        }          
};
上面的

函数被调用了2次。问题是我做错了什么

您应该将else if替换为else,或者在else if条件中添加另一个条件,如下所示

function addChildToParent(node, parent, child) {
    if (node.name == parent && flag !==false) {
        node.add(child);
        flag = true;
    }
    else if (node.name !== parent && flag == false){
        for (i = 0; i < node.children.length; i++) {
            addChildToParent(node.getChild(i), parent, type, child);
        }
    }
}

感谢我的帖子的zer00ne评论,我已经确定了问题。for中的i变量必须与var i一起使用,否则它会被覆盖,因为它不是局部变量,而是全局变量。

for (var i = 0; i < node.children.length; i++) {
            addChildToParent(node.getChild(i), parent, type, child);
        }

修复问题