2016-04-04 13 views
-1

Nach einem Vorschlag auf this Frage Ich versuche, ein zweidimensionales Array zu erstellen, aber ich laufe derzeit in einen Fehler beim Ausführen Ich glaube, das liegt daran, dass die Formatierung falsch ist oder ich einige vorherige Initialisierung fehlt.Wie richtig ein zweidimensionales Array in Javascript initialisieren?

Uncaught TypeError: Cannot set property '1' of undefined 

Hier ist ein Beispiel von dem, was zur Zeit mein Code wie folgt aussieht:

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; 

Antwort

4

Sie Initialisierung fehlt, Sie initializated nie array[1].

Hier ist eine Version des Codes mit diesem Update:

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

Dies und Strings müssen mit Anführungszeichen zu verpackenden (Dieser spezifische Fehler verursacht jedoch nicht) – blex

+0

Könnten Sie mir bitte ein Beispiel geben? –

+1

Laut einem Kommentar zu der anderen Antwort sind 'accept',' wrong' und 'best' Variablen, keine Strings. – Barmar

2

Wenn Sie die Elemente so sind hartzucodieren, können Sie dies tun:

var answers = [ 
    [accept, wrong, wrong], 
    [wrong, best, wrong] 
]; 

accept, wrong und best Unter der Annahme sind Vars.

+0

Ja akzeptiere, falsch und am besten sind vars - Mit dieser Lösung wäre ich in der Lage, Array-Elemente wie diese aufzurufen - i = index y = option_index, Antworten [i] [y] und Erhalten Sie den Wert, der jedem wie accept angefügt wird? –

+0

@NicolaSansom Ja. Dies definiert "Antworten [0] [0]", "Antworten [0] [1]", "Antworten [0] [2]", "Antworten [1] [0]", "Antworten [1] [1 ] 'und' Antworten [1] [2] '. – mpen

1

Wenn Sie wollen nicht stören, wenn das Array initialisiert wurde oder nicht, können Sie es initialisieren, wenn es nicht definiert ist, wie folgt aus:

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

Ich benutze eine ähnliche Funktion in PHP. Das ist ziemlich praktisch. – mpen

Verwandte Themen