2017-01-15 2 views
0

Я занимаюсь Javascript и имею следующий код, который возвращает ошибку Uncaught TypeError: Cannot set property '0' of undefined на линии sets[i][j] = initial_sets [i][j];. Идея кажется правильной, но я не могу понять, почему я получаю ошибку.Javascript loop error: 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]; 
    } 
} 

Я попробовал решение отправил в Uncaught TypeError: Cannot set property '0' of undefined " путем создания 1D массив, а затем назначить другое измерение к нему, но я все еще получаю ту же ошибку.

+0

У вас есть 3 массивов в 'initial_sets', но только 2 в' 'sets' так установить [2 ] 'is' undefined' –

+0

'initial_sets' - это 2D-массив, хотя – user2883071

+0

Что такое конечная цель кода? –

ответ

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]; 
    } 
} 

, то вам не придется инициализировать sets с пустыми массивами, он будет толкать их в случае необходимости.

0

Размеры массивов не совпадают.

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; 
} 

ИЛИ

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

да, они .. они оба 2D. И 'sets' будет динамически увеличиваться до размера' initial_sets'. – user2883071

+0

@ user2883071 Когда 'i == 2',' sets [i] 'не определено. Он динамически увеличивается, но значение 'sets [2]' равно 'undefined'. Поэтому 'sets [2] [j]' 'undefined' и не может быть установлен –

+0

Извинения, я вижу, что вы говорите. Я считаю, что возникла путаница, когда я попытался объявить 2D-массив. Я попытался инициализировать 2D-массив как таковой: 'var sets = [] [];' но это дало мне ошибку: 'Uncaught SyntaxError: Unexpected token]', поэтому я использовал 'var sets = [[], [] ]; ' – user2883071

0

Попробуйте это:

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);

Смежные вопросы