2017-01-15 9 views
0

Ich praktiziere Javascript und haben den folgenden Code, der einen Uncaught TypeError: Cannot set property '0' of undefined Fehler auf der sets[i][j] = initial_sets [i][j]; Zeile zurückgibt. Die Idee scheint richtig zu sein, aber ich kann nicht herausfinden, warum ich den Fehler bekomme.Javascript Schleife Fehler: Uncaught TypeError

var sets = [[],[]]; //Declared this 2D array based on solution in https://stackoverflow.com/questions/16512182/how-to-create-empty-2d-array-in-javascript 
var initial_sets=[[a,b],[c,d],[e,f]]; //2D array 
var i,j; 

//2D array sets is being filled by 2D array initial_sets 
for (i=0; i<initial_sets.length; i++) { 
    for (j=0; j<initial_sets[i].length; j++) { 
      sets[i][j] = initial_sets[i][j]; 
    } 
} 

Ich versuchte, die in Uncaught TypeError: Cannot set property '0' of undefined " geschrieben Lösung durch ein 1D-Array erstellen und dann eine weitere Dimension es zuweisen, aber ich immer noch die gleichen Fehler.

+0

Sie haben 3-Arrays in 'initial_sets' aber nur 2 in' sets' so 'set [2 ] 'ist' undefined' –

+0

'initial_sets' ist ein 2D Array obwohl – user2883071

+0

Was ist das? Endziel des Codes? –

Antwort

1
var sets = []; 
var initial_sets=[[a,b],[c,d],[e,f]]; 
var i,j; 

for (i=0; i<initial_sets.length; i++) { 
    // check if sets[i] exist. if not push a new emty array to it. 
    if(!sets[i]) sets.push([]); 
    for (j=0; j<initial_sets[i].length; j++) { 
      sets[i][j] = initial_sets[i][j]; 
    } 
} 

dann werden Sie nicht sets mit leeren Arrays zu initialisieren, wird es sie schieben, wenn nötig.

0

Die Abmessungen der Arrays sind nicht identisch.

var sets = []; 
var initial_sets=[["a","b"],["c","d"],["e","f"]]; 
var i,j; 

for (i=0; i<initial_sets.length; i++) { 
    var tmp = []; 
    for (j=0; j<initial_sets[i].length; j++) { 
      tmp[j] = initial_sets[i][j]; 
    } 
    sets[i] = tmp; 
} 

ODER

var sets = []; 
var initial_sets=[["a","b"],["c","d"],["e","f"]]; 
var i,j; 

for (i=0; i<initial_sets.length; i++) { 
    sets[i] = []; 
    for (j=0; j<initial_sets[i].length; j++) { 
      sets[i][j] = initial_sets[i][j]; 
    }  
} 
+0

ja, sie sind .. sie sind beide 2D. Und 'sets' werden dynamisch auf die Größe von' initial_sets' erhöht. – user2883071

+0

@ user2883071 Wenn 'i == 2',' setzt [i] 'ist undefiniert. Es stimmt zwar dynamisch, aber der Wert von 'sets [2]' ist 'undefiniert'. Also 'sets [2] [j]' ist 'undefined' und kann nicht gesetzt werden –

+0

Entschuldigung, ich sehe was du sagst. Ich glaube, meine Verwirrung entstand, als ich versuchte, ein 2D-Array zu deklarieren. Ich habe versucht, ein 2D-Array als solches zu initialisieren: 'var sets = [] [];' aber das gab mir einen Fehler: 'Uncaught SyntaxError: Unexpected token]', weshalb ich 'var sets = [[], [] benutzte ]; ' – user2883071

0

Versuchen Sie folgendes:

var sets = []; 
 
var initial_sets=[['a','b'],['c','d'],['e','f']]; 
 
var i,j; 
 

 
for (i=0; i<initial_sets.length; i++){ 
 
    sets[i]=[]; 
 
    for (j=0; j<initial_sets[i].length; j++){ 
 
    sets[i].push(initial_sets[i][j]); 
 
    } 
 
} 
 
console.log(sets);

Verwandte Themen