**Tell us what’s happening:**

**Your code so far**

```
function multiplyAll(arr) {
var product = 1;
// Only change code below this line
for (var i=0; i < arr.length; i++) {
for (var j=0; j < arr[i].length; j++) {
arr[i][j]) * product;
}
}
// Only change code above this line
return product;
}
// Modify values below to test your code
multiplyAll([[1,2],[3,4],[5,6,7]]);
```

**Your browser information:**

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

.

**Link to the challenge:**

https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-javascript/nesting-for-loops

You have a stray ) in your code

Where are you keeping the results of `arr[i][j]) * product;`

?

I got the right answer. Can you please help me better understand why we need to use .length ? What would happen if it wasn’t used?

Let me try.

If you have this array [20,25,30]

it has a length of 3

and has these three indices 0,1,2 arr[0] is 20, arr[1] is 25 and arr[2] is 30

So the .length property will always be one more than the largest index

When you loop through this array you want to visit arr[0], arr[1] and arr[2]

So you start at i = 0 and you continue while i < arr.length (aka 3) is true

Each cycle of the loop you visit arr[i] and then add 1 to i

When i actually becomes 3 the condition is false - 3 is not < arr.length - and the loop stops.

That is good because there is not an arr[3]

2 Likes