ノードを設定して再帰的に階層構造のツリーをレンダリングしようとしています(インデックス)。私はすでに根を知っている(トップ)。複数のルート要素があります。私は、変数ツリーで全体のhtmlを収集しようとしています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(インデックス、根)子供だけを横断した後に破るようだ(この全体のHTMLは、後にdiv要素に追加されます) 「トップ」配列の最初の要素の
コードは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/>'
}
UPDATE:これはスコープの問題であり、再帰の問題ではないことがわかります。再帰は大丈夫だった。ルート配列をループしている間に変数 'i'のスコープを定義しなかったので、それ以降の再帰関数はスコープなし 'i'の値を継承し、問題が発生しました。
+1優れた検索語です。 – Tomas
また、将来のバグを避けるために 'var n'と' var tree'を追加することをお勧めします。 – Tomas
@Tomas、ありがとう。はい、私は関連スコープを追加します。 'var i'部分が見つかりませんでした。その結果、後続の各関数はiの値を継承しました。 rcravensによるBrilliantの発見。 – papdel