-1

このSwap rows with columns (transposition) of a matrix in javascriptを読みましたが、うまくいきませんでした (私はまだ愚かなので)。

そのような個々の列として、それぞれ多数の配列があります。

id [1, 2, 3]
caption [one, two, three]
title [One, Two, Three]

列を行に変換したい:

arr= [1, one, One]

...

いくつかのコード

        var res = [];

        for(i in this.fields) {

            for(j in this.fields[i].value) {

                res[j][i] = this.fields[i].value[j];

            }

        }

「TypeError:未定義をオブジェクトに変換できません」

PHPではこの方法はうまくいきますが、誰かがjsでそれを行う方法を教えてくれませんか. 前もって感謝します。

簡単にするための更新

var arr = [];
arr[0] = [];

arr[6][0] = 5;
/*
Exception: can't convert undefined to object
@Scratchpad/1:4
 */

共通の文字列をスキャンするときは、0-0、0-1、0-2 のようなインデックスを使用して、行の終わりまで、再び 1-0 などを開始するまで繰り返します。しかし、ここでは列の終わりに 0-0、1-0、2-0、そして再び 1-0、1-1、1-1 が必要です ...

「これ」の更新。いくつかの行を追加するだけです:

                console.log(this.fields[i].value[j]);
                console.log('indexes: i='+i, 'j='+j);

ご覧のとおり、未定義の値はありません

4
indexes: i=0 j=0
1
indexes: i=1 j=0
1
indexes: i=2 j=0
one
indexes: i=3 j=0
One
indexes: i=4 j=0
4

2 に答える 2

1

ソース コードにいくつかの間違いがあります。this.fields値がどのように見えるかはわかりませんが、コード スニペットのために次のようにします。

this.fields = [
    { value: [1, 2, 3] },
    { value: [4, 5, 6] },
    { value: [7, 8, 9] }
]

変数がそのように見える場合this.fields、ソリューションからそれほど遠くありません。あなたのエラーメッセージは と言うTypeError: can't convert undefined to objectので、あなたの変数は説明のようには見えないと思います.

データを私の例のような形に変換すると、コード スニペットのソリューションからそれほど遠くありません。問題はres、その 2 番目の次元が配列で構成されていると想定されていることを知らないことです。これは、定義したことがないためです。を追加することで修正できますif(i === 0) res[j] = [];

したがって、説明した構造と小さな修正により、動作するはずです。

    var res = [];

    for(i in this.fields) {

        for(j in this.fields[i].value) {

            if(i === 0) res[j] = [];
            res[j][i] = this.fields[i].value[j];

        }

    }
于 2013-08-13T20:30:18.963 に答える
0

確かに、1 つのエラーはループ自体の中にあります。最初の反復res[j]では存在しますが、内側のループ内res[j][i]は定義されておらず、エラーがスローされます。要素が既に存在するかどうかを確認することで修正できます。

var res = [];

for(i in this.fields) {

    for(j in this.fields[i].value) {

        if( !res[j] ) { res[j] = []; }

        res[j][i] = this.fields[i].value[j];

    }

}
于 2013-08-13T20:25:59.223 に答える