我正在制作一个treemap in d3,它需要数据作为一系列嵌套对象,如下所示:
{
name: "flare",
children: [
{
name: "analytics",
children: [
{
name: "cluster",
children: [
{
name: "AgglomerativeCluster",
size: 3938
},
{
name: "CommunityStructure",
size: 3812
}
]
}
]
}
]
}
在幕后收集这些数据的自然方式是字典(在Python术语中),如下所示:
{
"flare": {
"analytics": {
"cluster": [
{
name: "AgglomerativeCluster",
size: 3938
},
//etc etc
如果不手工编写嵌套循环,从后者到前者的最自然方式是什么?
答案 0 :(得分:0)
编辑:我刚刚意识到我的回答是以错误的方式进行操作(从第一个版本到第二个版本)。但是,您可以使用相同的原则。
您可能还想查看d3.nest(),如下所述:D3 JSON data conversion
我会创建一个递归函数来实现这个目标。我不得不使用jQuery来映射子数组的每个元素的更新版本:
function reduce(dataset){
if('children' in dataset) {
var tmp = {}
tmp[dataset.name] = $.map(dataset.children, function(d){return reduce(d)})
return tmp
} else {
return dataset
}
}
当应用于您的示例数据集时,它会给出:
{
"flare": [{
"analytics": [{
"cluster": [{
"name": "AgglomerativeCluster",
"size": 3938
}, {
"name": "CommunityStructure",
"size": 3812
}]
}]
}]
}