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 product
vá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 for
hurkok használatával a legegyszerűbb módszerre fogunk összpontosítani .
Állítsa be a for
hurkok
Mivel arr
ez egy többdimenziós tömb, két for
hurokra 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 for
ciklust, 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 let
helyett 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 let
amikor 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 for
hurkot 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 product
meg 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 product
a 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ő for
hurok 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ő for
hurokban 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ő for
hurokban 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ő for
hurok á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ó i
megragadja az első al-tömb, [1, 2]
. Ezután az első iteráció az j
adott 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 subArray
változónak a külső for
hurokban 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 subArray
vá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 for
hurkokról. Most menj ki, és iterálj a legjobbakkal!