0

以下のJavaScript配列を持っています

var test =[{
Maths:{
    ST1:10,
    ST2:2,
    ST3:15}
},
{
Science:{
    ST1:50,
    ST3:40}
    }
]

これから以下に示す配列を生成したい

var t = [{ST1:{
               Maths:10,
               Science:50
              },
          ST2:{
               Maths:2,
               Science:0
              },
          ST3:{
               Maths:15,
               Science:40
              }
         }]

以下に示すコードを使用してみました

for (var key in test) {
  if (test.hasOwnProperty(key)) {
  for (var key1 in test[key]){
    //console.log(key1)}
    var abc = test[key][key1];
    for(var x in abc)
    {

    console.log(x+key1+abc[x])

    }

    }
  }
}

私はこれに慣れていないので、これを行うのに役立ちます。

4

4 に答える 4

1

これはほとんどあなたが望むことをします...

var t = {};
for (var i = 0; i < test.length; i++) {
    for (var name in test[i]) {
        for (var level in test[i][name]) {
            if (!t[level])
                t[level] = {}
            t[level][name] = test[i][name][level]
        }
    }
}

欠けているのは、値がセクションの下にないScience:0場合の forを取得することだけです。STx

デモ: http://jsfiddle.net/eHwBC/

結果:

{
    "ST1": {
        "Maths": 10,
        "Science": 50
    },
    "ST2": {
        "Maths": 2
    },
    "ST3": {
        "Maths": 15,
        "Science": 40
    }
}

for-in列挙に使用する場合、順序は保証されないことに注意してください。

ラベル (Math、Science など) が事前にわかっている場合は、各オブジェクトがすべてのラベルを取得するようにすることができます。

そうでない場合は、別のループを実行できます。アプローチによっては、このメイン ループの前または後に実行できます。

于 2012-06-07T19:07:26.673 に答える
0

これを試して:

var test =[{
Maths:{
    ST1:10,
    ST2:2,
    ST3:15
    }
},
{
Science:{
    ST1:50,
    ST3:40}
    }
];

var result = [];
for(i = 0; i <= test.length; i++){
  var resultRow = {};
  for(key in test[i]){
    for(subKey in test[i][key]){
      if(resultRow[subKey] == undefined){
        resultRow[subKey] = {};
      }
      resultRow[subKey][key] = test[i][key][subKey];
    }
  }
  result.push(resultRow);
}
于 2012-06-07T19:19:55.793 に答える
0

について知っていJSON.stringify(t)ますか?

オブジェクトリテラルを JSON に変換します。

この関数に関する Mozilla のドキュメントは、https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringifyで入手できます。

詳細な説明については、このブログ記事を読むこともできます

于 2012-06-07T18:48:13.873 に答える
0

以下のようにしてみてください、

/* Iterator start */
var t = {};
for (var i = 0; i < test.length; i++) {  //Iterate Maths, Science,..   
    for (var key in test[i]) {           //Iterate Math
        for (var iKey in test[i][key]) { //Iterate ST1, ST2, ST3
          var s = (t.hasOwnProperty(iKey))?t[iKey]:createObject();                    
          s[key] = test[i][key][iKey];
          t[iKey] = s;
        }
    }
}
/* Iterator End */ 

p = [];
p.push(t);
//^- p is what you want

// Separate function so you can add more items later without changing logic
function createObject () {
    return {'Maths' : 0, 'Science': 0};
}

以下のデモと証明、

ここに画像の説明を入力

于 2012-06-07T19:09:43.363 に答える