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



>我试图为 Treant.js 创建一个大对象。 我输入一个 Id,它会查询我的数据库并返回由该 ID 引用的人员数组。 然后,我想对每个返回的人和他们的孩子做同样的事情,以便创建一棵树。 我遇到的问题是我的函数只创建一个"分支"。当它到达死胡同时,它不会完成一级的 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;
};

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

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

最新更新