我用 d3 创建了一个由相关对象组成的交互式力导向树。节点和链接是使用 d3 树布局创建的。
数据结构如下:
{
"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 代码中干净地合并所有重复节点(由于交叉链接,这会将树转换为图形)?
编辑:也许这样做的唯一方法是走下整个树并重新链接指向副本的所有链接......虽然我认为这可能会大大减慢脚本......