我創建了一個與d3相關的對象的強制定向樹。節點和鏈接是使用d3樹佈局創建的。d3.js樹佈局 - 交叉鏈接
的數據結構如下:
{
"name": "node name",
"id": 1,
"children": [
{
"name": "child node name",
"id": 2
},
{
"name": "child node name",
"id": 3
},
...
]
},
...
的/鏈接創建下列方式節點:
var nodes = flatten(rootNode);
var links = d3.layout.tree().links(nodes);
爲了使樹的雙向穿越,我遞歸從走在樹每個新創建的節點並向所有節點添加父引用。
可以通過單擊葉節點來擴展樹。然後通過AJAX加載數據並更新樹。
問題在於,具有相同ID /名稱的對象可能會在樹中出現多次。有沒有辦法將JavaScript代碼中的所有重複節點(由於交叉鏈接將樹轉換爲圖形)乾淨地合併?
編輯:也許唯一的方法是沿着整棵樹走下去,重新鏈接所有指向重複的鏈接......雖然我認爲這可能會大大減慢腳本的速度。
你有一個jsfiddle更好的可視化? – manu
@manu:由於動態的AJAX調用很難複製......我不需要實際的代碼作爲答案,它更像是一個概念性問題:) –
只是爲了理解:每個節點都有其唯一的ID嗎?在那之後,每個節點可以放置在多個父母之下? – manu