1

次のように、一連のネストされたオブジェクトとしてデータを必要とする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

ネストされたループを手動で記述せずに、後者から前者に到達する最も自然な方法は何ですか?

4

1 に答える 1

0

編集:私の答えが間違った方法で操作を行っていることに気付きました(最初のバージョンから2番目のバージョンへ)。ただし、同じ原則を他の方法にも使用できます。

ここで説明されているように、d3.nest()も参照してください: D3 JSON データ変換


この目標を達成するために、再帰関数を作成します。jQuery を使用して、children 配列の各要素を更新されたバージョンにマップする必要がありました。

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/

于 2013-04-10T17:23:43.827 に答える