0

キー値(配列)をノードベース/ツリーマップ構造にまとめるのに苦労しています。以下は、説明に役立つサンプルコードです。

これを変換したい...

// key value data
var rawData = {
    "1": [],
    "2": [10],
    "3": [2,5,11],
    "4": [],
    "5": [1,7,6],
    "6": [4],
    "7": [],
    "8": [9],
    "9": [],
    "10": [],
    "11": []
}

このツリーマップに...

// tree map
var treeData = {
    "id": "ALL",
    "contents": [
        {   
            "id": "3",
            "contents": [
                { 
                    "id": "2",
                    "contents": [
                        { "id": "10" }
                    ]
                }, { 
                    "id": "5",
                    "contents": [
                        { "id": "1" },
                        { "id": "7" },
                        { 
                            "id": "6",
                            "contents": [
                                { "id": "4" }
                            ]
                        }
                    ] 
                },
                { "id": "11" }
            ]
        },
        {   
            "id": "8",
            "contents": [
                { "id": "9" }
            ]
        }
    ]
}

何らかの形の再帰が関係していると思いますが、ノードをトラバースするのに苦労しています...

var traverse = function(rawData) {
    for (var i in rawData){
        var datum = rawData[i];

        for (var j in datum) {
            if(i===datum[j]){
                // tack on node to datum
            }
            traverse(rawData);
        }
    }
}   
4

1 に答える 1

0

代わりに、for in を使用して配列 in を反復処理することはできません。

for (var j = 0; j < datum.length; i++) {
        if(i===datum[j]){
            // tack on node to datum
        }
        traverse(rawData);
    }
于 2013-01-22T06:19:17.837 に答える