3

私は問題をサーフィンしましたが、可能な解決策を得ることができませんでした..

このようなvarがあるとしましょう

var data = [
           {
              'a':10,
              'b':20,
              'c':30
           },
           {
              'a':1,
              'b':2,
              'c':3
           },
           {
              'a':100,
              'b':200,
              'c':300
           }];

今、私は次のような多次元配列が必要です

var values = [[10,1,100],    //a
              [20,2,200],    //b
              [30,3,300]];   //c

私が試したことは

var values = [];
for(var key in data[0])
{
   values.push([]);   // this creates a multidimesional array for each key
   for(var i=0;i<data.length;i++)
   {
     // how to push data[i][key] in the multi dimensional array
   }
}

注: キーの数はdata.length変化し続けており、余分な変数なしで使用したいだけです。余計なループは使いたくないpush()for

ここで重複を見つけた場合は、反対票を投じずにリンクをコメントとして入力してください

4

1 に答える 1

8

これを試して:

var result = new Array();

for(var i = 0; i < data.length; i++) {
  var arr = new Array();
  for(var key in data[i]) {
    arr.push(data[i][key]);
  }
  result.push(arr);
}

また、「arr」変数が必要ない場合は、結果に直接書き込みますが、私の意見では、上記のコードの方がはるかに理解しやすいです。

for(var i = 0; i < data.length; i++) {
  result.push(new Array());
  for(var key in data[i]) {
    result[i].push(data[i][key]);
  }
}

わかりました、あなたのコメントに基づいて、ループを変更しました。解決策を確認し、必要な場合は質問を回答済みとしてマークしてください。個人的には、追加の変数を使用する代わりに、乱雑で理解しにくいコードを好む理由がわかりませんが、それはまったく別のトピックです。

for(var i = 0; i < data.length; i++) {
  for(var j = 0; j < Object.keys(data[0]).length; j++) {
    result[j] = result[j] || new Array();
    console.log('result[' + j + '][' + i + ']' + ' = ' + data[i][Object.keys(data[i])[j]])
    result[j][i] = data[i][Object.keys(data[i])[j]];
  }
}
于 2013-05-22T10:56:26.150 に答える