此输入(tree-like结构)必须格式化为特定格式才能绘制d3 sankey diagram chart.
let unformattedJson = [
{
"key": "a1",
"value": 30,
"buckets": [
{
"key": "a2",
"value": 10
},
{
"key": "b2",
"value": 20
}
]
},
{
"key": "b1",
"value": 70,
"buckets": [
{
"key": "b2",
"value": 40
},
{
"key": "c2",
"value": 30
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
我需要生成的预期输出是:
{
"nodes": [
{"nodeId":0,"name":"a1"},
{"nodeId":1,"name":"a2"},
{"nodeId":2,"name":"b2"},
{"nodeId":3,"name":"b1"},
{"nodeId":4,"name":"c2"}
],
"links": [
{"source":0,"target":1,"value":10},
{"source":0,"target":2,"value":20},
{"source":3,"target":2,"value":40},
{"source":3,"target":4,"value":30}
]
}
Run Code Online (Sandbox Code Playgroud)
我的解决方案.我做了两个函数来计算节点和链接.对于节点,我做了一个递归函数来获取所有唯一键并id为每个键分配一个.我创建了另一个函数来获取键之间的所有关系.
let makeNodeObj = function(orObj, …Run Code Online (Sandbox Code Playgroud)