0

基本的にセルのスプレッドシートのように見える多次元配列 (retdata[R][C]) があります。R は行、C は列を表します。次のようにオブジェクトの配列を作成したい

 [{retdata[1][1]:retdata[2][1],retdata[1][2]:retdata[2][2],retdata[1][3]:retdata[2][3]    }, 
  {retdata[1][1]:retdata[3][1],retdata[1][2]:retdata[3][2],retdata[1][3]:retdata[3][3]    },
  {retdata[1][1]:retdata[4][1],retdata[1][2]:retdata[4][2],retdata[1][3]:retdata[4][3]    }, 
 etc...
]

結果の配列は次のようになります。

 [{"Col1":"dataR2C1","Col2":"dataR2C2", "Col3":"dataR2C3"}, 
 {"Col1":"dataR3C1","Col2":"dataR3C2", "Col3":"dataR3C3"}, 
 {"Col1":"dataR4C1","Col2":"dataR4C2", "Col3":"dataR4C3"}, 
 etc...
]

成功せずに多くのオプションを試しました。どんな助けでも大歓迎です。

これは私が使用した一例ですが、オブジェクトを適切にシリアル化していません。

                var TABLE = [];
                for (var i=2; i<=rows; i++) {
                    var ROW = {};                       
                    for (var j=1; j<=columns; j++){
                        name = retdata[1][j].toString;
                        value = retdata[i][j].toString;
                        ROW += {name: value}
                    }

                TABLE += ROW;   

                }
4

2 に答える 2

1

これは CSV パーサーのようなもので、テーブルの最初の行が行オブジェクトのキーです。関数は機能しますが、配列インデックスを修正する必要があります。常に から始まり、0まで実行されn-1ます。また、JavaScript の構文を少し学ぶ必要があります。

  • 何か.toStringがその値に対して toString 関数を呼び出すのではなく、その関数を取得します (これは単なるオブジェクトです)。
  • toString はまったく必要ありません-必要な場合、値は自動的にキャストされます
  • 単純な演算子を使用してオブジェクトにキーと値のペアを追加することはできません。ブラケット表記を使用して、オブジェクトのそのプロパティに値を割り当てる必要があります。+=演算子は値を文字列にキャストし、それらを連結します。
  • 配列でも同じです。メソッドを使用する.push()か、数値キーに割り当てるだけで、javascript 配列オブジェクトが自動的にその長さを更新します。
var retdata = […];

var table = [],
    keys = retdata.shift(); // get & remove the first row
for (var i=0; i<retdata.length; i++) {
    var row = {};
    for (var j=0; j<retdata[i].length; j++)
        row[ keys[j] ] = retdata[i][j];
    table[i] = row;
}
于 2012-09-13T17:46:05.407 に答える
-1

ベルギありがとう。これが私の最終的な解決策です:

              var TABLE = [];
                for (var i=2; i<=rows; i++) {
                    var ROW = {};                       
                    for (var j=1; j<=columns; j++){
                        ROW [retdata[1][j]] = retdata[i][j];
                    }
                TABLE[i]= ROW;  
                }

動作します。シフトは期待どおりに機能しませんでしたが、上記のコードはまさに私が必要としていたものです。ありがとう!

于 2012-09-13T18:00:30.250 に答える