Tell us what’s happening:
Describe your issue in detail here.
I was able to finish the test but I feel a bitter taste because I do not understand why after the inner loop is false and then the first level loop is executed, the variable J happens to have the value of 0 and therefore each one can be multiplied of the values of the internal arrays.
**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++)
product *= arr[i][j];
}
// Only change code above this line
return product;
}
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/90.0.4430.212 Safari/537.36
Not sure what you’re saying. Each timethe outer loop increments, the inner loop should start at 0 again - thus, in the first sub-array (when i==0, so arr[0]), j is 0 for the first element in that sub-array, then 1 for the next.
That array complete, i increments and j resets to 0, giving you arr[1][0] and then arr[1][1]. And so on. i indicates which inner array, and j indicates which index in that array.
However, i would recommend not using var here. i and j don’t need to exist outside this block, so use let to block-scope them.
I appreciate your answer, but I’m no pretty sure to understand why the inner loop resets to 0. Do I just have to understand it as a rule? … P.D. sorry about my English. And thanks by the advice about the var o let use.
On every single iteration of the outer loop (the i loop), you run the inner loop (the j loop). The inner loop explicitly says that it sets j=0 as the initialization step.
// ↓-------↓ This is the initialization part of the loop
for (let j = 0; j < arr[i].length; j++) {
// The initialization *always* runs before the loop starts
// ↓-↓ This is the incrementor part of the loop
for (let j = 0; j < arr[i].length; j++) {
// The incrementor runs after every loop iteration
// ↓---------------↓ This is the exit condition
for (let j = 0; j < arr[i].length; j++) {
// The loop stops after the exit condition is met