1
私は以下のメソッドを持っています - JSONスキーマからツリー構造を生成するために使用される再帰的メソッドです。再帰的メソッド - 各呼び出しで値を増やす
私は、ツリーの各ノードのレベルとランクを維持したいです。 (ランク=水平ランク、レベル=垂直ランク(順次増分))レベルとランクの目的は、後で同じ構造をSVGに描画することです。
ランクは正しく取得されますが、ネストされたリストから外に出るとレベルは更新されません。レベルを正しく更新するには?
ランクとレベルを使用せずにsvgにこの構造体を描画する方法はありますか?
function traverseJSONSchema1(root, rootname, resultpane, lev, rank) {
if (root.type === "object") {
var listitem = resultpane.append("li");
if (rootname !== "") {
listitem.text(rootname + ":" + root.type + "-" + lev + "-" + rank);
rank++;
lev++;
}
var newlist = listitem.append("ul");
var items = root.properties; //select PROPERTIES
for (var i = 0; i < Object.keys(items).length; i++) { //traverse through each PROPERTY of the object
var itemname = Object.keys(items)[i];
var item = items[itemname];
traverseJSONSchema1(item, itemname, newlist, lev + i, rank);
}
} else if (root.type === "array") {
var items = root.items; //select ITEMS
var listitem = resultpane.append("li");
if (rootname !== "") {
listitem.text(rootname + ":" + root.type + "[" + items.type + "]" + "-" + lev + "-" + rank);
rank++;
lev++;
}
traverseJSONSchema1(items, "", listitem, lev + 1, rank); //recurse through the items of array
} else if (["string", "integer", "number", "boolean"].indexOf(root.type) > -1) { //when the type is a primitive
var listitem = resultpane.append("li");
if (rootname !== "") {
listitem.text(rootname + ":" + root.type + "-" + lev + "-" + rank);
rank++;
lev++;
}
}
}
あなたがランクやレベルに問題がありますか? – Slavik
レベルが問題です - 間違いを修正して質問を更新します。 – SachiDangalla
ブランチの最後のノードに到達したときにレベルを返すのはどうですか?私が正しく理解していれば、最高レベルのバックアップを前任者に正しく渡す必要があります。 –