Я хочу, чтобы заполнить 2d массив, и у меня есть этот код в JavaScript:

n=2; //rows
m=3; //columns
z=0;
array1=[];
for(i=0;i<n;i++){
    for(j=0;j<m;j++){
        array1[i]=[];
        array1[i][j] = z;
        console.log(i+","+j+"="+z); //debug
        z++;
    }

}

console.log(array1);

Но вместо того, чтобы получить этот ожидаемый результат;

[[0, 1, 2], [3, 4, 5]]

Я получил:

[[undefined, undefined, 2], [undefined, undefined, 5]]

Зачем!? Я не понимаю, почему я получаю undefined для всех элементов в каждом "внутреннем" массиве, кроме последнего, который является правильным (здесь, 2 и 5).

Я сделал шаг отладки, регистрируя каждую пару i,j и назначенное значение z, и каждый раз получаю правильные значения пары (i,j=z):

0,0=0
0,1=1
0,2=2
1,0=3
1,1=4
1,2=5

Итак, я думаю, что я правильно заполняю массив, используя arr[i][j]=z каждый раз, так почему он получает неопределенные значения для этих случаев? Я также попытался использовать синтаксис arr=new Array() вместо arr=[] в обоих случаях, но с тем же результатом.

Любые идеи? Я почти уверен, что это будет тривиальная ошибка, но я не могу найти, что не так!

Спасибо.

0
DiegoDD 25 Янв 2013 в 03:15

2 ответа

Лучший ответ

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

array1[i]=[];

Когда вы должны делать это только один раз для значения i. Переместите инициализацию из самого внутреннего цикла.

7
Interrobang 24 Янв 2013 в 23:17

Вот как это должно быть

n=2; //rows
m=3; //columns
z=0;
array1=[];
for(i=0;i<n;i++){
    array1[i]=[];
    for(j=0;j<m;j++){
        array1[i].push(z); // Here is my change
        console.log(i+","+j+"="+z); //debug
        z++;
    }

}
0
Ibu 24 Янв 2013 в 23:17