Нестинг Фор Лоопс у ЈаваСцрипт-у

Ако имате проблема са разумевањем изазова ФрееЦодеЦампа Нестинг Фор Лоопс, не брините. Вратили смо ти леђа.

У овом проблему морате довршити multiplyAll()функцију и за аргумент узимати вишедимензионални низ. Не заборавите да мулти-димензионални низ, који се понекад назива 2Д низ је само низ поља, на пример, [[1,2], [3,4], [5,6]].

У уређивачу с десне стране multiplyAll()дефинисано је на следећи начин:

function multiplyAll(arr) { var product = 1; // Only change code below this line // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]); 

Морате да довршите функцију тако да помножи productпроменљиву са сваким бројем у поднизима параметра arr, који је вишедимензионални низ.

Постоји много различитих начина за решавање овог проблема, али ми ћемо се фокусирати на најједноставнији метод помоћу forпетљи.

Подесите своје forпетље

Будући да се arrради о вишедимензионалном низу, требаће вам две forпетље: једна за петљу кроз сваки низ под-низова, а друга за пролазак кроз елементе у сваком под-низу.

Провуците се кроз унутрашње низове

Да бисте то урадили, подесите forпетљу као у претходним изазовима:

function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { } // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]); 

Имајте на уму да користимо letуместо varза петљу и за декларацију product. У овом изазову нећете приметити разлику између њих двоје, али генерално је добра пракса користити ЕС6 constи letкад год можете. Више о томе зашто можете прочитати у овом чланку.

Сада пријавите сваки од под-низова на конзолу:

function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { console.log(arr[i]); } // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]); 

Пошто зовете multiplyAll()са [[1,2],[3,4],[5,6,7]]дна, требало би да видите следеће:

[ 1, 2 ] [ 3, 4 ] [ 5, 6, 7 ]

Прелистајте елементе у сваком под-низу

Сада треба да петљате кроз сваки број у поднизима које сте управо пријавили на конзолу.

Уклоните console.log(arr[i]);и направите другу forпетљу унутар оне коју сте управо написали:

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

Имајте на уму да, за унутрашње петље, потребно је да проверите .lengthна arr[i], јер arr[i]је један од под-низова смо гледали раније.

Сада се пријавите arr[i][j]на конзолу да бисте видели сваки од појединачних елемената:

function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr[i].length; j++) { console.log(arr[i][j]); } } // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]); 
1 2 3 4 5 6 7

На крају, помножите productса сваким елементом у сваком од под-низова:

function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { for (let 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]]);

Ако се пријавите productна конзолу, видећете тачан одговор за сваки тест случај:

function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr[i].length; j++) { product *= arr[i][j]; } } // Only change code above this line console.log(product); return product; } multiplyAll([[1,2],[3,4],[5,6,7]]);
6 // [[1], [2], [3]] 5040 // [[1, 2], [3, 4], [5, 6, 7]] 54 // [[5, 1], [0.2, 4, 0.5], [3, 9]]

Ближе посматрање

Ако и даље нисте сигурни зашто горњи код делује, не брините - нисте сами. Рад са угнежђеним петљама је сложен, па чак и искусни програмери могу да се збуне.

У оваквим случајевима може бити корисно пријавити нешто детаљније на конзолу. Вратите се коду и пријавите `Sub-array ${i}: ${arr[i]}`се на конзолу непосредно пре унутрашње forпетље:

function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { console.log(`Sub-array ${i}: ${arr[i]}`); for (let 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]]);

У спољној forпетљи, свака итерација пролази кроз поднизове у arr. Ово би требало да видите у конзоли:

Sub-array 0: 1,2 Sub-array 1: 3,4 Sub-array 2: 5,6,7

Имајте на уму да горе користимо шаблон литерале. `Sub-array ${i}: ${arr[i]}`је исто што 'Sub-array ' + i + ': ' + arr[i]и једноставно пуно лакше писати.

Сада се у унутрашњој forпетљи пријавите `Element ${j}: ${arr[i][j]}`на конзолу:

function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { console.log(`Sub-array ${i}: ${arr[i]}`); for (let j = 0; j < arr[i].length; j++) { console.log(`Element ${j}: ${arr[i][j]}`); product *= arr[i][j]; } } // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]);

Унутрашња forпетља пролази кроз сваки елемент у сваком под-низу ( arr[i]), па бисте ово требали видети у конзоли:

Sub-array 0: 1,2 Element 0: 1 Element 1: 2 Sub-array 1: 3,4 Element 0: 3 Element 1: 4 Sub-array 2: 5,6,7 Element 0: 5 Element 1: 6 Element 2: 7

Прва итерација iхвата до првог подменија арраи, [1, 2]. Тада прва итерација од jпролази кроз сваки елемент у том под-низу:

// i is 0 arr[0] // [1, 2]; // j is 0 arr[0][0] // 1 // j is 1 arr[0][1] // 2 ----- // i is 1 arr[1] // [3, 4] // j is 0 arr[1][0] // 3 // j is 1 arr[1][1] // 4 ...

Овај пример је прилично једноставан, али arr[i][j]и даље може бити тешко разумљив без пријављивања више ствари на конзолу.

Једно брзо побољшање које можемо направити је декларисање subArrayпроменљиве у спољној forпетљи и подешавање исте као arr[i]:

function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { const subArray = arr[i]; for (let 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]]); 

Затим само направите неколико подешавања кода да бисте користили нову subArrayпроменљиву уместо arr[i]:

function multiplyAll(arr) { let product = 1; // Only change code below this line for (let i = 0; i < arr.length; i++) { const subArray = arr[i]; for (let j = 0; j < subArray.length; j++) { product *= subArray[j]; } } // Only change code above this line return product; } multiplyAll([[1,2],[3,4],[5,6,7]]); 

То би требало да буде све што треба да знате о вишедимензионалним низовима и угнежђеним forпетљама. Сада изађите тамо и поновите најбоље од њих!