Как заполнить циклы внутри рекурсивной функции? - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь создать большой объект для Treant.js.Я ввожу идентификатор, и он запрашивает мою базу данных и возвращает массив людей, на которые ссылался этот идентификатор.Затем я хочу сделать то же самое с каждым возвращенным человеком и его детьми, чтобы создать дерево.Проблема, с которой я сталкиваюсь, заключается в том, что моя функция создает только одну «ветку».Когда он попадает в тупик, он не заканчивает цикл for на один уровень вверх.Любая помощь будет оценена. вот визуальное представление того, что происходит

                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 голосов
/ 25 сентября 2018

Ваша переменная цикла - это глобальная переменная в том виде, в котором вы ее записали в настоящее время.Это вызовет серьезные проблемы с рекурсией, потому что каждый рекурсивный вызов будет ссылаться на одну и ту же переменную i.Используйте var или предпочтительно let и посмотрите, сохраняется ли ваша проблема.

for (let i = 0; i < startingObj.children.length; i++) {
  ...
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...