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)代码>