# What is going on in these for loops?

Tell us what’s happening:
I understand for the challenge I need to add row = in the first loop to reinitialize it. What I don’t get is why before fixing the matrix it is calculating to:

[ [ 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0 ] ]

If I’m understanding the code snippet and how push() works correctly, newArray.push(row) is being invoked 3 times, in the outer loop and each time row is being pushed into newArray. The first time it would push [0,0] then, [0,0,0,0], and last [0,0,0,0,0,0] so why isn’t the output:

[ [0,0], [0,0,0,0 ], [0,0,0,0,0,0]]

Thanks in advance!

``````
function zeroArray(m, n) {
// Creates a 2-D array with m rows and n columns of zeroes
let newArray = [];
let row = [];
for (let i = 0; i < m; i++) {
// Adds the m-th row into newArray

for (let j = 0; j < n; j++) {
// Pushes n zeroes into the current row to create the columns
row.push(0);
}
// Pushes the current row, which now has n zeroes in it, to the array
newArray.push(row);
}
return newArray;
}

let matrix = zeroArray(3, 2);
console.log(matrix);

``````

Your browser information:

User Agent is: `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36`.

Challenge: Use Caution When Reinitializing Variables Inside a Loop

Link to the challenge:

for how arrays work, it is pushing a reference to `row`
so the array at the end is `[row, row, row]`, whatever the value of `row` at the end, that’s what appear inside `newArray`

1 Like

you can look at the code with this tool to see it visualized:

http://pythontutor.com/javascript.html#mode=edit

1 Like

@ilenia THANK YOU! I did not realize JavaScript referenced arrays (which to my understanding are objects in JavaScript) like that! I’m 1,000,000 times sure you just saved me a bunch of headaches and heartaches from my future programs. Thank you again and for the new tool as well.

it does the same with objects, in case you didn’t know

1 Like