Fészkelés hurkok számára a JavaScript-ben

Ha problémái vannak a freeCodeCamp Nesting For Loops kihívásának megértésével, ne aggódjon. Megkaptuk a hátad.

Ebben a problémában ki kell töltenie a multiplyAll()függvényt, és argumentumként egy többdimenziós tömböt vesz fel. Ne feledje, hogy a többdimenziós tömb, amelyet néha 2D tömbnek is hívnak, csak tömb tömb, például [[1,2], [3,4], [5,6]].

A jobb oldali szerkesztőben a multiplyAll()következőképpen van meghatározva:

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

Be kell fejeznie a függvényt, így a productváltozót megszorozza az egyes számokkal a paraméter altömbjeiben arr, ami egy többdimenziós tömb.

Nagyon sokféleképpen lehet megoldani ezt a problémát, de a forhurkok használatával a legegyszerűbb módszerre fogunk összpontosítani .

Állítsa be a forhurkok

Mivel arrez egy többdimenziós tömb, két forhurokra lesz szükséged : az egyikre az egyes résztömbök tömbjein keresztül, és a másikra az egyes tömbök elemein keresztül.

Hurok a belső tömbökön

Ehhez állítson be egy forciklust, hasonlóan a korábbi kihívásokhoz:

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

Ne feledje, hogy a ciklus lethelyett varés a deklaráláshoz használjuk product. Ebben a kihívásban nem fogsz észrevenni különbséget a kettő között, de általában jó gyakorlat az ES6-ok használata, constés letamikor csak lehet. A miértről ebben a cikkben olvashat bővebben.

Most jelentkezzen be az egyes tömbökből a konzolba:

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

Mivel alul hív multiplyAll(), így [[1,2],[3,4],[5,6,7]]a következőket kell látnia:

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

Hurkolja végig az egyes tömbök elemeit

Most át kell néznie az egyes tömböket az imént a konzolra bejelentkezett résztömbökben.

Távolítsa el console.log(arr[i]);és hozzon létre egy másik forhurkot az imént írt belsejében:

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

Ne feledje, hogy a belső hurok esetében ellenőriznünk kell a .length- arr[i]mivel arr[i]ez az egyik altömb, amelyet korábban megvizsgáltunk.

Most jelentkezzen arr[i][j]be a konzolba az egyes elemek megtekintéséhez:

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

Végül szorozzuk productmeg az egyes tömbök minden elemével:

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

Ha bejelentkezik producta konzolra, az egyes tesztesetekre a helyes választ fogja látni:

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

Közelebbről

Ha még mindig nem tudja, miért működik a fenti kód, ne aggódjon - nem vagy egyedül. A beágyazott hurkok használata bonyolult, és még a tapasztalt fejlesztők is megzavarodhatnak.

Ilyen esetekben hasznos lehet valami részletesebb naplózása a konzolon. Térjen vissza a kódjához, és jelentkezzen `Sub-array ${i}: ${arr[i]}`be a konzolba közvetlenül a belső forhurok előtt :

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

A külső forhurokban minden iteráció átmegy a rész tömbökön arr. Ezt látnia kell a konzolon:

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

Ne feledje, hogy a fenti sablon literálokat használjuk. `Sub-array ${i}: ${arr[i]}`megegyezik 'Sub-array ' + i + ': ' + arr[i], csak sokkal könnyebb írni.

Most a belső forhurokban jelentkezzen `Element ${j}: ${arr[i][j]}`be a konzolra:

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

A belső forhurok átmegy az egyes résztömbök ( arr[i]) minden elemén , ezért ezt látnia kell a konzolon:

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

Az első iteráció imegragadja az első al-tömb, [1, 2]. Ezután az első iteráció az jadott tömb minden elemén átmegy:

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

Ez a példa meglehetősen egyszerű, de arr[i][j]még mindig nehéz megérteni anélkül, hogy több dolgot naplózna a konzolra.

Az egyik gyors fejlesztés, amelyet egy subArrayváltozónak a külső forhurokban való deklarálásával és annak egyenlővé tételével állíthatunk be 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]]); 

Ezután csak végezzen néhány módosítást a kódban, hogy az új subArrayváltozót használja 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]]); 

Ez minden, amit tudnia kell a többdimenziós tömbökről és a beágyazott forhurkokról. Most menj ki, és iterálj a legjobbakkal!