2016-04-04 16 views
-1

this質問に答える2次元配列を作成しようとしていますが、実行中にエラーが発生していますが、フォーマットが正しくないか、以前の初期化が欠けていると思われます。ここでjavascriptで2次元配列を正しく初期化するには?

Uncaught TypeError: Cannot set property '1' of undefined 

は私のコードは、現在どのように見えるかのサンプルです:あなたは、初期化が欠落している

var answers = []; 
answers [0] = []; 
answers[0][1] = accept; answers[0][2] = wrong; answers[0][3] = wrong; 
answers[1][1] = wrong; answers[1][2] = best; answers[1][3] = wrong; 

答えて

4

、あなたはarray[1]をinitializatedことはありません。ここで

は、この修正プログラムを使用してコードのバージョンです:

var answers = []; 
answers[0] = []; 
answers[1] = []; 
answers[0][1] = accept; 
answers[0][2] = wrong; 
answers[0][3] = wrong; 
answers[1][1] = wrong; 
answers[1][2] = best; 
answers[1][3] = wrong; 
+1

これを、文字列は引用符でラップする必要がありますしかし、この特定のエラーは発生しません) – blex

+0

私に例を挙げてください。 –

+1

他の答えのコメントによると、 'accept'、' wrong'、 'best'は文字列ではなく変数です。 – Barmar

2

あなたがそのような要素をハードコーディングしている場合、あなたはこれを行うことができます:

acceptwrongbestされていると仮定すると
var answers = [ 
    [accept, wrong, wrong], 
    [wrong, best, wrong] 
]; 

ヴァルス。

+0

はい、間違っていてvarsが最適です - このような配列要素を呼び出すことができますか?i = index y = option_index、answers [i] [y]受け入れのようなそれぞれの値を取得しますか? –

+0

@NicolaSansomはい。これは 'answers [0] [0]'、 'answers [0] [1]'、 'answers [0] [2]'、 'answers [1] [0]'、 'answers [1] [1] ] 'と' answers [1] [2] 'を返します。 – mpen

1

あなたは、配列が初期化されたかどうか気にしたくない場合は、それが定義されていない場合は、このように、それを初期化することができます(

function insert(array,path,value) { 
    path.forEach(function(i,pos) { 
    if(array[i]===undefined) array[i] = []; 
    if(pos<path.length-1) array = array[i]; 
    else array[i] = value; 
    }); 
} 

var answers = []; 
insert(answers,[1,2,3],"accept"); 
alert(answers[1][2][3]); // accept 
+0

私はPHPで同様の機能を使用しています。これは非常に便利です。 – mpen

関連する問題