Umetanje petlji u JavaScript

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 productvarijablu 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 forpetlji.

Postavite svoje forpetlje

Budući da arrje višedimenzionalni niz, trebat će vam dvije forpetlje: 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 forpetlju 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 letumjesto varza petlju i za deklaraciju product. U ovom izazovu nećete primijetiti razliku između njih dvoje, ali općenito je dobra praksa koristiti ES6 consti letkad 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 forpetlju 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 .lengthu 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 productsa 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 productna 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 forpetlje:

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 forpetlji 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 forpetlji 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 forpetlja 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 ihvata prvi pod-niz, [1, 2]. Tada prva iteracija od jprolazi 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 subArrayvarijable u vanjskoj forpetlji 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 subArrayvarijablu 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 forpetljama. Sada izađite tamo i ponovite najbolje od njih!