2013-11-24 49 views
1

我想用d3.js使用树形布局创建一个图。代替具有层次结构子共同火炬JSON结构等:d3.js数组结构与数据结构

{ 
    "name":"bla", 
    "children":[ 
     { 
     "name":"bla2", 
     "someattribute":"green"  
     } 
    ] 
} 

我只是有(其表示时间步长元件)的阵列。我总是希望数组的下一个元素成为当前的子元素(ren)。 所以实际上我想要一个树生成一个扁平数组。 我的想法是变树的布局像这样的儿童功能:

var tree = d3.layout.tree() 
    .children(function(d,i) { 
     return data[(i+1)]; 
    }) 

,但只有一个元素显示在树中。我不明白。在data[0]上拨打​​时,是不是应该遍历每个元素?

为了澄清我的要求:我想打开像[ele1, ele2, ele3]数组成树形图,看起来像:

ele1-->ele2-->ele3 
+0

这看起来像是对我的'.children'函数的滥用 - 即使它在这种特殊情况下工作,它也容易打破其他。我强烈建议以一种让孩子更加明确的方式来格式化数据。 –

回答

1

真正的问题,我看到的是,传递给.children()需求函数返回数组子对象,而不是因为它现在是一个单一的对象,即

var tree = d3.layout.tree() 
.children(function(d,i) { 
    return i < data.length - 1; data.slice(i+1, i+2) : null; 
}) 

同样重要的是,叶节点(数组中的最后一个数据对象)返回null,而不是一个空列表。

使用这种方法,我创建了一个工作JSFiddle,它将根据一组对象创建一个线性树。

但是,我同意@ LarsKotthoff对您的帖子的评论;如果您以分层格式传递tree.nodes()对象的根,那么您的代码在维护性和灵活性方面会更好。

+0

哇,谢谢你的努力! – Schnodderbalken