我正在尝试为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;
};
答案 0 :(得分:2)
您当前编写的循环变量是一个全局变量。因为每个递归调用都将引用相同的i
变量,所以这将导致递归的重大问题。使用var
或最好使用let
来查看问题是否仍然存在。
for (let i = 0; i < startingObj.children.length; i++) {
...
};