如何将字典(嵌套对象)转换为树形图的d3可用数组

时间:2013-04-10 16:58:01

标签: d3.js treemap

我正在制作一个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

如果不手工编写嵌套循环,从后者到前者的最自然方式是什么?

1 个答案:

答案 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
            }]
        }]
    }]
}

jsFiddle:http://jsfiddle.net/chrisJamesC/kKDm3/