„Lizdų lizdai“ „JavaScript“

Jei kyla problemų suprantant „freeCodeCamp“ „Nesting For Loops“ iššūkį, nesijaudinkite. Mes atgavome tavo nugarą.

Šioje užduotyje turite užpildyti multiplyAll()funkciją ir kaip argumentą naudoti daugialypį masyvą. Atminkite, kad daugialypis masyvas, kartais vadinamas 2D masyvu, yra tik masyvų masyvas, pavyzdžiui [[1,2], [3,4], [5,6]].

Dešinėje esančiame redaktoriuje multiplyAll()apibrėžiama taip:

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]]); 

Turite užbaigti funkciją, kad ji productkintamąjį padaugintų iš kiekvieno parametro arr, kuris yra daugialypis matrica, masyvuose.

Yra daug įvairių būdų išspręsti šią problemą, tačiau mes sutelksime dėmesį į paprasčiausią metodą, naudodami forkilpas.

Nustatykite savo forkilpas

Kadangi arrtai yra daugialypis masyvas, jums reikės dviejų forkilpų: vienos, kad būtų galima pereiti per kiekvieną submasyvų masyvą, ir kitos, kad būtų galima pereiti per kiekvienos masyvo elementus.

Perjunkite vidinius masyvus

Norėdami tai padaryti, nustatykite forkilpą, kaip ir anksčiau.

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]]); 

Atminkite, kad mes naudojame letvietoj varkilpos ir deklaruoti product. Šiame iššūkyje jūs nepastebėsite skirtumo tarp jų, tačiau paprastai yra gera praktika naudoti ES6 constir letkai tik galite. Daugiau apie tai galite sužinoti šiame straipsnyje.

Dabar užregistruokite kiekvieną pogrupį į konsolę:

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]]); 

Kadangi skambinate multiplyAll()naudodamiesi [[1,2],[3,4],[5,6,7]]apačioje, turėtumėte pamatyti:

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

Peržiūrėkite kiekvieno masyvo elementus

Dabar reikia perskaityti kiekvieną skaičių masyvuose, kuriuos ką tik prisijungėte prie konsolės.

Pašalinkite console.log(arr[i]);ir sukurkite kitą forkilpą toje, kurią ką tik parašėte:

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]]); 

Atminkite, kad vidinei kilpai turime patikrinti .length, arr[i]nes arr[i]tai yra vienas iš antrinių masyvų, į kuriuos žiūrėjome anksčiau.

Dabar prisijunkite arr[i][j]prie konsolės, kad pamatytumėte kiekvieną atskirą elementą:

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

Galiausiai padauginkite productiš kiekvieno kiekvieno masyvo elemento:

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]]);

Jei prisijungsite productprie pulto, pamatysite teisingą kiekvieno bandymo atvejo atsakymą:

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]]

Iš arčiau

Jei vis dar nežinote, kodėl veikia aukščiau pateiktas kodas, nesijaudinkite - jūs ne vienas. Darbas su įdėtomis kilpomis yra sudėtingas, ir net patyrę kūrėjai gali supainioti.

Tokiais atvejais gali būti naudinga prisijungti prie pulto ką nors išsamesnio. Grįžkite prie savo kodo ir prisijunkite `Sub-array ${i}: ${arr[i]}`prie konsolės prieš pat vidinę forkilpą:

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]]);

Išorinėje forkilpoje kiekviena iteracija eina per vidinius masyvus arr. Tai turėtumėte pamatyti konsolėje:

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

Atkreipkite dėmesį, kad mes naudojame aukščiau pateiktus šablonų literalus. `Sub-array ${i}: ${arr[i]}`yra tas pats kaip 'Sub-array ' + i + ': ' + arr[i], tiesiog daug lengviau parašyti.

Dabar vidinėje forkilpoje prisijunkite `Element ${j}: ${arr[i][j]}`prie konsolės:

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]]);

Vidinė forkilpa eina per kiekvieną kiekvieno masyvo elementą ( arr[i]), todėl tai turėtumėte pamatyti konsolėje:

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

Pirmoji iteracija ipaima pirmąjį pogrupį [1, 2]. Tada pirmoji iteracija jeina per kiekvieną to masyvo elementą:

// 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 ...

Šis pavyzdys yra gana paprastas, tačiau arr[i][j]jį vis tiek gali būti sunku suprasti neprisijungus prie konsolės kelių dalykų.

Vienas greitas patobulinimas, kurį galime padaryti, yra subArraykintamojo paskelbimas išorinėje forkilpoje ir jo nustatymas 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]]); 

Tada tiesiog atlikite kelis kodo patobulinimus, kad subArrayvietoj 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]]); 

Tai turėtų būti viskas, ką reikia žinoti apie daugialypius matricas ir įdėtas forkilpas. Dabar eik ten ir kartok geriausius iš jų!