2015-02-13 4 views
1

Я попытался сделать несколько многомерных массивов в Javascript:Как получилось, что положение «arr [i] = []» приводит к сбою кода?

var arr = []; 
for (i = 0; i < 5; i++){ 
    for (j = 0; j < 5; j++){ 
    arr[i] = []; 
    arr[i][j] = i*j 
    } 
} 

Но при проверке результата с:

for(i = 0; i < 5; i++){ 
    for(j = 0; j < 5; j++){ 
    console.log(arr[i][j]) 
    } 
} 

я наткнулся на кучу «неопределенными» ... Но, просто переключая arr[i] = [] откуда это между «за» заявления:

var arr = []; 
    for (i = 0; i < 5; i++){ 
     arr[i] = []; 
     for (j = 0; j < 5; j++){ 
     arr[i][j] = i*j 
     } 
    } 

он работал отлично. ЗАЧЕМ????

+0

Пройдите код для 'i = 0' и' j = 0..1'. – Blender

+0

B/c вы переносите пустой массив на [i] для каждого j, поэтому единственным индексом, на самом деле имеющим sth, является j = 4. – Mahdi

ответ

5

Поскольку первый способ инициализации arr [i] = [] каждый раз, так что устанавливается только последний элемент j.

arr [i] [4] - единственный, который получает множество, arr [i] [0] через arr [i] [3] больше не определены. Я объяснил это достаточно хорошо? Позвольте мне попробовать добавить комментарий на линии вы имеете проблемы с:

var arr = []; 
for (i = 0; i < 5; i++){ 
    for (j = 0; j < 5; j++){ 
    arr[i] = []; // 2nd time through the loop arr[i][0] is gone because you just re-initialized the array 
    arr[i][j] = i*j 
    } 
} 
+0

Да, это хорошо объяснено! – RFiischer

0

Каждый раз, когда вы повторить внутренний цикл, массив, содержащийся в arr[i] переопределен как новый, пустой массив. Перемещение до начала внутреннего цикла for не позволяет заменить arr[i].

0

Вы продолжаете переписывать свой массив во внутреннем цикле!

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