我試圖通過設置一個節點(索引)遞歸時渲染樹狀分層結構。我已經知道根源(top)。有多個根元素。我想收集變量樹整個HTML(這整個HTML將被追加到後面一個div)Javascript遞歸函數似乎在第一次通過後退出
tree = "";
top = ["1", "11", "14", "17", "72", "73", "74", "78", "79", "98", "99"];
index = {
1: {
'name': "Node 1",
'children': "2,3,4,5,6,7,8,9,10"
},
2: {
'name': "Node 2",
'children': ""
},
//.... goes all the way upto 99
}
遞歸函數makeFT(指數,根)似乎只穿越後孩子打破「頂部」數組中的第一個元素。代碼爲jsbin及以下。可能是什麼問題呢?有一個更好的方法嗎?任何幫助表示讚賞。
makeFT(index, top);
function makeFT(index, roots) {
console.log(roots);
tree == "" ? tree += '<ul>' : tree += '<ul><hr/>'
for (i = 0; i < roots.length; ++i) {
n = parseInt(roots[i]);
//console.log(n);
//console.log(index[n]);
tree += '<li>' + roots[i] + '</span>' + index[n].name;
if (index[n].children === "") {
tree += '<input class="leaf tree-first-input" type="text" size="2">'
}
else {
tree += '<input class="non-leaf tree-first-input" type="text" size="2">'
makeFT(index, index[n].children.split(","));
}
tree += "</li>"
}
tree += '</ul><br/>'
}
更新:原來這是一個範圍問題,而不是一個遞歸問題。遞歸是正常的。由於在循環遍歷根數組時,我沒有定義變量'i'的範圍,因此每個後續遞歸函數都會繼承unscoped'i'的值,從而產生問題。
我認爲tree是一個全局定義的變量,所以這個函數不能返回任何值。 – EvilMM 2010-12-03 12:21:28
不管我是否返回值,都會發生此問題。試試自己。 – papdel 2010-12-03 12:23:35
@EvilMM - 正確 – papdel 2010-12-03 12:24:03