如何完成递归函数内部的for循环?

时间:2018-09-24 22:30:38

标签: javascript recursion tree

我正在尝试为Treant.js创建一个大对象。我输入一个ID,它查询我的数据库并返回该ID所引用的人员数组。然后,我想对每个返回的人及其子女做同样的事情,以便创建一棵树。我遇到的问题是我的函数仅创建一个“分支”。当到达死胡同时,它不会完成for循环的上一级。任何帮助,将不胜感激。 here is a visual representation of whats happening

                function getChildren (id) {
                    var url = "core/downline.php";
                    $.ajax({
                        async: false,
                        type: 'POST',
                        url: url,
                        data: {id: id},
                        success: function(result) {
                            array = JSON.parse(result);
                        }
                    });
                    return {
                        text: {
                            name: "insert name",
                            text: id,
                        },
                        children: array
                    };
                };

                function createStructure(id) {
                    var startingObj = getChildren(id);
                    function finishStructure(startingObj) {
                        for(i=0; i < startingObj.children.length; i++) {
                            startingObj.children[i] = getChildren(startingObj.children[i].id);
                            if(startingObj.children[i].children !== null) {
                                finishStructure(startingObj.children[i]);
                            }
                        };
                        return startingObj;

                    };
                    startingObj = finishStructure(startingObj)
                    return startingObj;
                };

1 个答案:

答案 0 :(得分:2)

您当前编写的循环变量是一个全局变量。因为每个递归调用都将引用相同的i变量,所以这将导致递归的重大问题。使用var或最好使用let来查看问题是否仍然存在。

for (let i = 0; i < startingObj.children.length; i++) {
  ...
};