2

別の多次元配列から新しい多次元配列を作成しようとしています。最初の配列は次のようになります。

array[0][0] = foo
array[0][1] = foo2
...and so on
array[1][0] = 123
array[1][1] = 234
...and so on
array[2][0] = blue
array[2][1] = red
...and so on
array[3][0] = fish
array[3][1] = bird
...and so on

...次に、数値(1、20、23など)を含む「results」という配列があります。私がやりたいのは、最初の配列と同じように、新しい多次元配列を作成することですが、配列'results'で数値として検出される最初の配列の要素のみを使用します。

以下は、これまでのところうまくいかない私の試みです。コードを実行すると、次のエラーメッセージが表示されます。

Uncaught TypeError: Cannot set property '0' of undefined) <- line 5

私は何が間違っているのですか?

1: var newArray = [];
2:
3: for (var i = 0; i < results.length; i++) {
4:    var index = results[i]
5:    newArray[0][i] = array[0][index];
6:    newArray[1][i] = array[1][index];
7:    newArray[2][i] = array[2][index];
8:    newArray[3][i] = array[3][index];
9: }
4

1 に答える 1

6

常にアレイを初期化する必要があります。

newArray[0] = [];

この例のように:

var newArray = [];
// newArray[12345] is undefined
newArray[12345][2] = 3; // error!

newArray[12345]undefined、であり、未定義の要素を配列として扱いたいとします。したがって、それを行う前に、サブアレイを初期化する必要があります。

var newArray = [];
newArray[12345] = []; // now "newArray[12345]" is new subarray
newArray[12345][2] = 3;

編集:

var newArray = [];

for (var i = 0; i <= 3; i++) {
    newArray[i] = []; 
    //newArray[i] = new Array(); - same thing
}

for (var i = 0; i < results.length; i++) {
    var index = results[i]
    newArray[0][i] = array[0][index];
    newArray[1][i] = array[1][index];
    newArray[2][i] = array[2][index];
    newArray[3][i] = array[3][index];
}
于 2013-01-17T19:33:25.563 に答える