2016-03-03 2 views
2

Я работал над некоторыми упражнениями на freecodecamp, и я застрял в этом упражнении для упражнений с петлями. Я смог найти решение, но я не совсем понимаю.Вложение для многомерного массива цикла. Концептуальный

Может кто-нибудь объяснить мне, как работает вторая петля с переменной J? Я читал онлайн, говоря, что первый цикл for - для внешнего массива, а второй - внутренний массив, но зачем останавливаться на двух циклах, почему бы не три?

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; 
} 

// Modify values below to test your code 
multiplyAll([[1,2],[3,4],[5,6,7]]); 
+0

Потому что 'inner array' имеет длину = 2..and условие цикла меньше длины, поэтому оно будет итерировать для index => 0 ... 1 ... break ... – Rayon

+1

Вы можете использовать отладчик для строки по line jump и отмечая значения 'i' и' j' для каждой итерации, или я бы предложил сделать это с помощью ручки или бумаги самостоятельно один раз. –

+0

Поскольку массив вложен в два уровня. –

ответ

7

Это очень простые логические вопросы. Идеальный способ понять это - это то, как @Abhinav упомянул в комментарии.

// Module that multiplies all the number in 2D array and returns the product 
function multiplyAll(arr) { 
    var product = 1; 

    // Iterates the outer array 
    for (var i=0;i<arr.length;i++) { 
     // 1st Iter: [1,2] 
     // 2nd Itr: [3,4] 
     // 3rd Itr: [5,6,7] 
     console.log('i: ' + i, arr[i]); 
     for (var j=0;j<arr[i].length;j++) { 
      // Outer loop 1st inner 1st : 1 
      // Outer loop 1st inner 2nd : 2 
      // Outer loop 2nd inner 1st : 3 
      // ... 
      console.log('j: ' + j, arr[i][j]); 

      // Save the multiplication result 

      // Prev multiplication result * current no; 
      // Outer loop 1st inner 1st : 1 * 1 = 1 
      // Outer loop 1st inner 2nd : 1 * 2 = 2 
      // Outer loop 2nd inner 1st : 2 * 3 = 6 
      // Outer loop 2nd inner 1st : 6 * 4 = 24 
      // ... 
      product *= arr[i][j]; 
     } 
    } 

    // Only change code above this line 
    return product; 
} 


multiplyAll([[1,2],[3,4],[5,6,7]]); 

Запустить это в консоли браузера. Это может дать вам определенную ясность.

+0

Спасибо за ответ! Теперь это намного больше. – Stev

+0

Является ли обозначение 'i' или' j' сделанным вами или как работает строка в этом случае? Я не понимаю, почему бы не использовать другие слова, такие как 'a' или' b' – nelruk

Смежные вопросы