0

ある形式の配列から別の形式へのデータ構造の変換については疑問があります。

私の入力データは次の形式です。

var testVar=[

{
    "count": 1,
    "term": "Company",
    "Company": [
        {
            "Tata": [
                {
                    "count": 1,
                    "term": "Tatagroup"
                }
            ],
            "sector": "Automotive",
            "type": "Car"
        },
      ]
},
{
    "count": 2,
    "term": "Country",
    "Country": [
        {
            "France": [
                {
                    "count": 1,
                    "term": "France"
                }
            ],
            "region": "Europe",
            "Player": "Zidane",
            "term": "France",
            "code": "FRA"
        },
        {
            "region": "Europe",
            "Player": "Federer",
            "term": "Switzerland",
            "Switzerland": [
                {
                    "count": 1,
                    "term": "Switzerland"
                }
            ],
            "code": "SWI"
        }
    ]
}];

そして私はそれを形に変換しようとしています、

[ "Tata" : [{"sector" : "automotive"}, "type" : "car"], "France": [{"region" : "Europe}, {"Player" : "Zidane"} , {"code" : "FRA"}], "switzerland" : [{"region" : "Europe}, {"Player" : "Federer"} , {"code" : "SWI"}]];

私が思いついたコードはhttp://jsfiddle.net/X2apw/2/のように見えますが、正確ではありません。

4

1 に答える 1

2
var testvar = [...];

var result = {};
for (var i=0; i<testvar.length; i++) {
    var arr = testvar[i][testvar[i].term];
    for (var j=0; j<arr.length; j++) {
        var resarr = [];
        for (var k in arr[j]) {
            if (typeof arr[j][k] == "string") {
                 var obj = {};
                 obj[k] = arr[j][k];
                 resarr.push(obj);
            } else {
                 result[k] = resarr;
            }
        }
    }
}

jsfiddle.netでのデモ

ただし、結果形式では、1つのプロパティオブジェクトの配列ではなく、1つのオブジェクトのみを使用することを強くお勧めします。内側のループ本体を次のように変更します。

        var resobj = {};
        for (var k in arr[j]) {
            if (typeof arr[j][k] == "string") {
                 resobj[k] = arr[j][k];
            } else {
                 result[k] = resobj;
            }
        }

デモ

于 2012-08-03T06:22:39.940 に答える