d3.js树形布局,数组为数据结构

时间:2013-11-24 19:55:59

标签: javascript json layout d3.js tree

我想使用树形布局用d3.js创建一个图表。而不是具有分层儿童的普通耀斑json结构,如:

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

我只有一个数组(代表时间步长的元素)。我总是希望数组的下一个元素是当前的子(ren)元素。 所以实际上我想要一个用扁平数组生成的树。 我的想法是改变树形布局的子功能,如下所示:

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

但树中只显示一个元素。我不明白。在tree.nodes上调用data[0]时,它不应该遍历每个元素吗?

澄清我的要求:我想将像[ele1, ele2, ele3]这样的数组转换为如下所示的树形图:

ele1-->ele2-->ele3

1 个答案:

答案 0 :(得分: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()对象的根,那么您的代码将在可维护性和灵活性方面得到更好的服务。