Ako imate problema s razumijevanjem izazova FreeCodeCampa Nesting For Loops, ne brinite. Vratili smo ti leđa.
U ovom problemu morate dovršiti multiplyAll()
funkciju i za argument uzimati višedimenzionalni niz. Ne zaboravite da je multi-dimenzionalni niz, ponekad se naziva 2D polja, je samo niz polja, na primjer, [[1,2], [3,4], [5,6]]
.
U uređivaču s desne strane multiplyAll()
definirano je kako slijedi:
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]]);
Morate dovršiti funkciju tako da pomnoži product
varijablu sa svakim brojem u podnizima parametra arr
, koji je višedimenzionalni niz.
Postoji mnogo različitih načina za rješavanje ovog problema, ali mi ćemo se usredotočiti na najjednostavniju metodu pomoću for
petlji.
Postavite svoje for
petlje
Budući da arr
je višedimenzionalni niz, trebat će vam dvije for
petlje: jedna za petlju kroz svaki od nizova podskupova, a druga za provlačenje kroz elemente u svakom podnizu.
Provucite se kroz unutarnje nizove
Da biste to učinili, postavite for
petlju kao što ste to radili u prethodnim izazovima:
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]]);
Imajte na umu da koristimo let
umjesto var
za petlju i za deklaraciju product
. U ovom izazovu nećete primijetiti razliku između njih dvoje, ali općenito je dobra praksa koristiti ES6 const
i let
kad god možete. Više o tome zašto možete pročitati u ovom članku.
Sada zabilježite svaki od podsreda na konzolu:
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]]);
Budući da zovete multiplyAll()
s [[1,2],[3,4],[5,6,7]]
dna, trebali biste vidjeti sljedeće:
[ 1, 2 ] [ 3, 4 ] [ 5, 6, 7 ]
Prelistajte elemente u svakom pod-nizu
Sada trebate petljati kroz svaki broj u podnizima koje ste upravo prijavili na konzolu.
Uklonite console.log(arr[i]);
i stvorite drugu for
petlju unutar one koju ste upravo napisali:
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]]);
Zapamtite da, za unutarnje petlje, potrebno je provjeriti .length
u arr[i]
jer arr[i]
je jedan od pod-polja smo gledali ranije.
Sada se prijavite arr[i][j]
na konzolu da biste vidjeli svaki od pojedinačnih elemenata:
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
Konačno, pomnožite product
sa svakim elementom u svakom od nizova:
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]]);
Ako se prijavite product
na konzolu, vidjet ćete točan odgovor za svaki testni slučaj:
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]]
Bliži pogled
Ako još uvijek niste sigurni zašto gornji kod funkcionira, ne brinite - niste sami. Rad s ugniježđenim petljama je složen, pa se čak i iskusni programeri mogu zbuniti.
U ovakvim slučajevima može biti korisno prijaviti nešto detaljnije na konzolu. Vratite se svom kodu i prijavite `Sub-array ${i}: ${arr[i]}`
se na konzolu neposredno prije unutarnje for
petlje:
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]]);
U vanjskoj for
petlji svaka iteracija prolazi kroz podnizove u arr
. Ovo biste trebali vidjeti u konzoli:
Sub-array 0: 1,2 Sub-array 1: 3,4 Sub-array 2: 5,6,7
Imajte na umu da gore koristimo predloške literale. `Sub-array ${i}: ${arr[i]}`
je isto što 'Sub-array ' + i + ': ' + arr[i]
i jednostavno puno lakše napisati.
Sada se u unutarnjoj for
petlji prijavite `Element ${j}: ${arr[i][j]}`
na konzolu:
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]]);
Unutarnja for
petlja prolazi kroz svaki element u svakom podnizu ( arr[i]
), pa biste ovo trebali vidjeti u konzoli:
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
Prva iteracija i
hvata prvi pod-niz, [1, 2]
. Tada prva iteracija od j
prolazi kroz svaki element u tom podnizu:
// 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 ...
Ovaj je primjer prilično jednostavan, ali i arr[i][j]
dalje može biti teško razumljiv bez prijavljivanja više stvari na konzolu.
Jedno brzo poboljšanje koje možemo napraviti je deklariranje subArray
varijable u vanjskoj for
petlji i postavljanje jednake 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]]);
Zatim samo napravite nekoliko podešavanja koda kako biste koristili novu subArray
varijablu umjesto 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]]);
To bi trebalo biti sve što trebate znati o višedimenzionalnim nizovima i ugniježđenim for
petljama. Sada izađite tamo i ponovite najbolje od njih!