I am trying to break (the code given in example down) to understand but It is confusing me, below is my code and comments to see what I think it is in each loop. Then why result is different?
fvar arr = [
[1,2], [3,4], [5,6]
];
for (var i=0; i < arr.length; i++) { // 0,1,2
for (var j=0; j < arr[i].length; j++) {
//arr[i] = [1,2]; j = 0
//arr[i] = [3,4]; j = 1
//arr[i] = [5,6]; j = 2
console.log("arr with ij is " +arr[i][j]);
//[1,2][0]
//[3,4][1]
//[5,6][2]
}
}
Link to the challenge:
https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-javascript/nesting-for-loops
More like this
for (var i=0; i < arr.length; i++) { // 0,1,2
for (var j=0; j < arr[i].length; j++) {
/** For i = 0 **/
//arr[i] = [1,2]; j = 0
//arr[i] = [1,2]; j = 1
console.log("arr with ij is " +arr[i][j]);
//[1,2][0]
//[1,2][1]
/** For i = 1 **/
//arr[i] = [3,4]; j = 0
//arr[i] = [3,4]; j = 1
console.log("arr with ij is " +arr[i][j]);
//[3,4][0]
//[3,4][1]
/** For i = 2 **/
//arr[i] = [5,6]; j = 0
//arr[i] = [5,6]; j = 1
console.log("arr with ij is " +arr[i][j]);
//[5,6][0]
//[5,6][1]
}
}
Basically, Your arr[i] does not change until j has completed its loop entirely
1 Like
and I am lost. I don’t understand what is happening.
Do you understand how a single for loop works without nesting?
yes, I do. what is confusing to me when you wrote in comments
/** For i = 0 **/
//arr[i] = [1,2]; j = 0
//arr[i] = [1,2]; j = 1
why loop is going over arr[i] twice in each loop?
Because j has to finish before it goes to the next i iteration
I am lost, sorry but can you expand on your answer?
Ok, if you forget about nesting for a second and ran just 1 single loop , this would your outcome
for (var i=0; i < arr.length; i++) { // 0,1,2
// arr[0] = [1,2] // Inner loop would iterate through this first
// arr[1] = [3,4] // Inner loop then iterates through this
// arr[2] = [5,6] // Inner loop will finally iterates through this
}
so when you include your inner loop it iterates through each content of the upper loop and
if you look at it separately, your inner loop will first
for (var j=0; i < arr[0].length; j++) {
// arr[0][0] = 1
// arr[0][1] = 2
}
then after it finishes the above it goes to the next arr[i] which is arr[1]
for (var j=0; i < arr[1].length; j++) {
// arr[1][0] = 3
// arr[1][1] = 4
}
Finally it goes to the last arr[i], which is arr[2]
for (var j=0; i < arr[2].length; j++) {
// arr[2][0] = 5
// arr[2][1] = 6
}