【发布时间】:2014-02-20 14:50:09
【问题描述】:
我是 d3 和 javascript 的新手,如果这是一个愚蠢的问题,我很抱歉。我对 d3 强制布局有疑问。我可以用数据填充“节点”,但我不知道如何编写正确的函数来构造我的链接,格式为"links": [
{"source": 0, "target": 1},
我试图写一个循环,但它不起作用,目标有“权重:NaN”,因为我正在引用父级和与父级同名的节点,我猜:
d3.json('file.json',function(data){
var nodes = data;
var links = [];
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < data[i].parents.length; j++) {
links.push({"source": i, "target": data[i].parents[j]})
}
}
我的 json 文件看起来像这样,我必须将所有对象与相应的父对象连接起来(更改 json 文件不是选项):
[
{
"name": "name 1",
"parents": [
{"name": "name 5"},
{"name": "name 4"}
]
},
{
"name": "name 2",
"parents": [
{"name": "name 1"},
{"name": "name 3"}
]
},...
]
我希望有人可以帮助并向我解释如何正确编写此函数。 谢谢。苏珊
【问题讨论】:
-
那是因为你的变量
nodes需要一个平面数组,而不是一个层次结构。然后,例如,links数组中对象内的属性source需要nodes数组中节点的索引,或对该节点对象的直接引用。无论如何,强制布局在这里似乎不合适,您检查过树形布局,您可以使用它轻松管理分层结构吗?
标签: javascript json d3.js force-layout