Javascript 将边列表转换为d3中的嵌套树结构

Javascript 将边列表转换为d3中的嵌套树结构,javascript,d3.js,graph,Javascript,D3.js,Graph,我有一个构建树的边列表列表: [ {'start': 'A', 'end': 'B'}, {'start': 'B', 'end': 'C'}, {'start': 'B', 'end': 'D'}, {'start': 'D', 'end': 'E'}, {'start': 'D', 'end': 'F'}, {'start': 'D', 'end': 'G'}, ] 我使用一个递归函数将数据转换为嵌套的: { 'name': 'A',

我有一个构建树的边列表列表:

[
    {'start': 'A', 'end': 'B'},
    {'start': 'B', 'end': 'C'},
    {'start': 'B', 'end': 'D'},
    {'start': 'D', 'end': 'E'},
    {'start': 'D', 'end': 'F'},
    {'start': 'D', 'end': 'G'},
]
我使用一个递归函数将数据转换为嵌套的:

{
    'name': 'A',
    'children': [
        {
            'name': 'B',
            'children': [
                {
                    'name': 'C',
                    'children': []
                },
                {
                    'name': 'D',
                    'children': [
                        {
                            'name': 'E',
                            'children': []
                        },
                        {
                            'name': 'F',
                            'children': []
                        },
                        {
                            'name': 'G',
                            'children': []
                        },
                    ]
                }
            ]
        }
    ]
}

我想问一下,d3js是否已经内置了可以实现相同结果的东西?

尝试
d3.stratify
,它获取父子关系列表,并创建一个可以传递给d3.tree或其他任何东西的层次结构

对于包含属性为
start
(父级)和
end
(子级)的对象的数据数组,您可以使用:

  var root = d3.stratify()
    .id(function(d) { return d.end; })
    .parentId(function(d) { return d.start; })(dataArray)
需要注意的是,您需要一个没有父节点的项,这将成为根节点:“对于根节点,父节点id应该是未定义的。(Null和空字符串相当于未定义)”。因此,在您的情况下,我们仍然需要向数据数组中添加一项:
{'start':''end':'A'}

var数据=[
{'start':''end':'A'},
{'start':'A','end':'B'},
{'start':'B','end':'C'},
{'start':'B','end':'D'},
{'start':'D','end':'E'},
{'start':'D','end':'F'},
{'start':'D','end':'G'},
]
var root=d3.stratify()
.id(函数(d){返回d.end;})
.parentId(函数(d){返回d.start;})
(数据);
console.log(root)