2016-11-17 16 views
1
var arr = [[],[]]; 
var si = 5; 
var c = 0; 
if (arr[si][c] == null) 
{ 
    arr[si][c] = { 
      code : "Test", 
    }; 
} 
alert(arr[si][c].code); 

こんにちは、私はこのサンプルコードを実行しようとしていますが、未定義の属性 "0"が呼び出せないというエラーが表示されています。この2次元アレイでエラーが発生するのはなぜですか?

インデックスに変数 "si"と "c"の代わりに数値を使用すると、エラーが表示されません。

JSでは変数をインデックスとして使用できない可能性はありますか?私は非二次元配列で動作すると思います。

ありがとうございます

+4

。 –

+0

[JavaScriptで2次元配列を作成するにはどうすればいいですか?](http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript) – Liam

+0

http://stackoverflow.com/questions/39325636/porting-c-sharp-3d-array-to-js-3d-array/39328793#39328793も参照してください。多次元JS配列それは3次元ですが、確かに2のためにそれを変更することができます。 –

答えて

6

JavaScriptには2次元配列の概念がありません。他の配列を含む配列だけ。

arr[si][c]は、arr[5][0]です。

arrは、それぞれが配列である2つのメンバー(0および)を持つ配列です。

arr[5]にアクセスすると、終了時を過ぎたためにundefinedになります。

undefined[0]はエラーです。

インデックスに変数 "si"と "c"の代わりに数値を使用すると、エラーが表示されません。

変数の代わりにリテラルを使用すると、同じエラーが発生します。おそらくあなたの作業テストにはと異なるの番号が含まれています。

var arr = [[],[]]; 
 
if (arr[5][0] == null) 
 
{ 
 
    arr[5][0] = { 
 
      code : "Test", 
 
    }; 
 
} 
 
alert(arr[5][0].code);

+0

こんにちは、あなたの説明をありがとう。しかし、2D配列を作成するにはどうしたらいいですか?インデックスは、私がデータベースから取得する数字であるはずです。だから0 - Nではなく、5,5,10,100,200,300,300,400,500のようになります。 – Wintersun

+0

@Wintersun - できません。答えの最初の文に戻ります。必要な外部配列のインデックスに明示的に配列を作成する必要があります。 – Quentin

0

arr[si].length-1が大きくなったりcに等しい場合は、最初のチェックをしようとします。このような何か:

if((arr[si].length-1)>c) 
0

あなたは1としてsiを設定した場合、それはとても指数01を持っているなるように定義arrでは、2つの要素[][]を持っているとしてあなたは、5すなわち配列インデックス arr[5]を定義していないアクセスしていますまたは0が動作します。 arrawysその配列 - 2次元配列ではない

var arr = [[],[]]; 
 
var si = 1; 
 
var c = 0; 
 
if (arr[si][c] == null) 
 
{ 
 
    arr[si][c] = { 
 
      code : "Test", 
 
    }; 
 
} 
 
alert(arr[si][c].code);

関連する問題