Trimis būdais galite rasti didžiausią masyvo skaičių naudodami „JavaScript“

Šiame straipsnyje aš paaiškinsiu, kaip išspręsti „Free Code Camp iššūkį „Grąžinti didžiausią skaičių masyvuose . Tai reiškia, kad grąžinsite masyvą su didžiausiais skaičiais iš kiekvieno antrinio masyvo.

Apsvarstysiu tris būdus:

  1. su FOR kilpa
  2. naudojant sumažinimo () metodą
  3. naudojant Math.max ()

Algoritmo iššūkio aprašymas

Grąžinkite masyvą, kurį sudaro didžiausias skaičius iš kiekvieno pateikto antrinio masyvo. Kad būtų paprasčiau, pateiktame masyve bus tiksliai 4 pogrupiai.

Atminkite, kad galite kartoti masyvą naudodami paprastą ciklą ir prieiti prie kiekvieno nario naudodami masyvo sintaksę arr [i].

function largestOfFour(arr) { return arr; } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]); 

Pateikti bandymo atvejai

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]) should return an array. largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]) should return [27,5,39,1001]. largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]]) should return [9, 35, 97, 1000000].

1 požiūris: grąžinkite didžiausius masyvo skaičius naudodami „For Loop“

Štai mano sprendimas su įdėtais komentarais, kurie padės jums tai suprasti:

 function largestOfFour(arr) { // Step 1. Create an array that will host the result of the 4 sub-arrays var largestNumber = [0,0,0,0]; // Step 2. Create the first FOR loop that will iterate through the arrays for(var arrayIndex = 0; arrayIndex < arr.length; arrayIndex++) { /* The starting point, index 0, corresponds to the first array */ // Step 3. Create the second FOR loop that will iterate through the sub-arrays for(var subArrayIndex = 0; subArrayIndex  largestNumber[arrayIndex]) { largestNumber[arrayIndex] = arr[arrayIndex][subArrayIndex]; /* FOR loop cycles arrayIndex => i subArrayIndex => j Iteration in the first array For each iteration: arr[i][j] largestNumber[i] if arr[i][j] > largestNumber[i]? then largestNumber[i] = arr[i][j] First iteration: arr[0][0] => 4 largestNumber[0] => 0 4 > 0? => TRUE then largestNumber[0] = 4 Second iteration: arr[0][1] => 5 largestNumber[0] => 4 5 > 4? => TRUE then largestNumber[0] = 5 Third iteration: arr[0][2] => 1 largestNumber[0] => 5 1 > 5? => FALSE then largestNumber[0] = 5 Fourth iteration: arr[0][3] => 3 largestNumber[0] => 5 3 > 5? => FALSE then largestNumber[0] = 5 Fifth iteration: arr[0][4] => FALSE largestNumber[0] => 5 largestNumber = [5,0,0,0] Exit the first array and continue on the second one Iteration in the second array For each iteration: arr[i][j] largestNumber[i] if arr[i][j] > largestNumber[i]? then largestNumber[i] = arr[i][j] First iteration: arr[1][0] => 13 largestNumber[1] => 0 13 > 0? => TRUE then largestNumber[1] = 13 Second iteration: arr[1][1] => 27 largestNumber[1] => 13 27 > 13? => TRUE then largestNumber[1] = 27 Third iteration: arr[1][2] => 18 largestNumber[1] => 27 18 > 27? => FALSE then largestNumber[1] = 27 Fourth iteration: arr[1][3] => 26 largestNumber[1] => 27 26 > 27? => FALSE then largestNumber[1] = 27 Fifth iteration: arr[1][4] => FALSE largestNumber[1] => 27 largestNumber = [5,27,0,0] Exit the first array and continue on the third one Iteration in the third array For each iteration: arr[i][j] largestNumber[i] if arr[i][j] > largestNumber[i]? then largestNumber[i] = arr[i][j] First iteration: arr[2][0] => 32 largestNumber[2] => 0 32 > 0? => TRUE then largestNumber[2] = 32 Second iteration: arr[2][1] => 35 largestNumber[2] => 32 35 > 32? => TRUE then largestNumber[2] = 35 Third iteration: arr[2][2] => 37 largestNumber[2] => 35 37 > 35? => TRUE then largestNumber[2] = 37 Fourth iteration: arr[2][3] => 39 largestNumber[2] => 37 39 > 37? => TRUE then largestNumber[2] = 39 Fifth iteration: arr[2][4] => FALSE largestNumber[2] => 39 largestNumber = [5,27,39,0] Exit the first array and continue on the fourth one Iteration in the fourth array For each iteration: arr[i][j] largestNumber[i] if arr[i][j] > largestNumber[i]? then largestNumber[i] = arr[i][j] First iteration: arr[3][0] => 1000 largestNumber[3] => 0 1000 > 0? => TRUE then largestNumber[3] = 1000 Second iteration: arr[3][1] => 1001 largestNumber[3] => 1000 1001 > 1000? => TRUE then largestNumber[3] = 1001 Third iteration: arr[3][2] => 857 largestNumber[3] => 1001 857 > 1001? => FALSE then largestNumber[3] = 1001 Fourth iteration: arr[3][3] => 1 largestNumber[3] => 1001 1 > 1001? => FALSE then largestNumber[3] = 1001 Fifth iteration: arr[3][4] => FALSE largestNumber[3] => 1001 largestNumber = [5,27,39,1001] Exit the FOR loop */ } } } // Step 4. Return the largest numbers of each sub-arrays return largestNumber; // largestNumber = [5,27,39,1001]; } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

Ir štai be mano komentarų:

 function largestOfFour(arr) { var largestNumber = [0,0,0,0]; for(var arrayIndex = 0; arrayIndex < arr.length; arrayIndex++) { for(var subArrayIndex = 0; subArrayIndex  largestNumber[arrayIndex]) { largestNumber[arrayIndex] = arr[arrayIndex][subArrayIndex]; } } } return largestNumber; } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

2 požiūris: grąžinkite didžiausią masyvo skaičių su įmontuotomis funkcijomis - su žemėlapiu () ir sumažinkite ()

Šiam sprendimui naudosite du metodus: Array.prototype.map () metodą ir Array.prototype.reduce () metodą.

  • Žemėlapis () metodas sukuria naują masyvo su paskambinus pateiktą funkciją kiekvienas elementas šiame masyve rezultatus. Žemėlapio naudojimas pakvies numatytą atgalinio skambinimo funkciją vieną kartą kiekvienam masyvo elementui eilės tvarka ir sukurs naują masyvą iš rezultatų.
  • Sumažinti () metodas taikomas funkciją prieš akumuliatorius ir kiekviena iš masyvo vertė jį sumažinti iki vieno vertė.

Ternary operatorius yra vienintelis Javaskriptą operatorius, trunka tris operandų. Šis operatorius naudojamas kaip „if“ sakinio spartusis klavišas.

(currentLargestNumber > previousLargestNumber) ? currentLargestNumber : previousLargestNumber;

Tai taip pat galima skaityti taip:

if (currentLargestNumber > previousLargestNumber == true) { return currentLargestNumber; } else { return previousLargestNumber; }

Štai mano sprendimas su įdėtais komentarais:

 function largestOfFour(mainArray) { // Step 1. Map over the main arrays return mainArray.map(function (subArray){ // Step 3. Return the largest numbers of each sub-arrays => returns [5,27,39,1001] // Step 2. Grab the largest numbers for each sub-arrays with reduce() method return subArray.reduce(function (previousLargestNumber, currentLargestNumber) { return (currentLargestNumber > previousLargestNumber) ? currentLargestNumber : previousLargestNumber; /* Map process and Reduce method cycles currentLargestNumber => cLN previousLargestNumber => pLN Iteration in the first array For each iteration: cLN pLN if (cLN > pLN) ? then cLN else pLN First iteration: 4 0 4 > 0? => TRUE 4 / Second iteration: 5 4 5 > 4? => TRUE 5 / Third iteration: 1 5 1 > 5? => FALSE / 5 Fourth iteration: 3 5 3 > 5? => FALSE / 5 Fifth iteration: / 5 returns 5 Exit the first array and continue on the second one Iteration in the second array For each iteration: cLN pLN if (cLN > pLN) ? then cLN else pLN First iteration: 13 0 13 > 0? => TRUE 13 / Second iteration: 27 13 27 > 13? => TRUE 27 / Third iteration: 18 27 18 > 27? => FALSE / 27 Fourth iteration: 26 27 26 > 27? => FALSE / 27 Fifth iteration: / 27 returns 27 Exit the first array and continue on the third one Iteration in the third array For each iteration: cLN pLN if (cLN > pLN) ? then cLN else pLN First iteration: 32 0 32 > 0? => TRUE 32 / Second iteration: 35 32 35 > 32? => TRUE 35 / Third iteration: 37 35 37 > 35? => TRUE 37 / Fourth iteration: 39 37 39 > 37? => TRUE 39 / Fifth iteration: / 39 returns 39 Exit the first array and continue on the fourth one Iteration in the fourth array For each iteration: cLN pLN if (cLN > pLN) ? then cLN else pLN First iteration: 1000 0 1000 > 0? => TRUE 1000 / Second iteration: 1001 1000 1001 > 1000? => TRUE 1001 / Third iteration: 857 1001 857 > 1001 => FALSE / 1001 Fourth iteration: 1 1001 1 > 1001? => FALSE / 1001 Fifth iteration: / 1001 returns 1001 Exit the first array and continue on the fourth one */ }, 0); // 0 serves as the context for the first pLN in each sub array }); } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

Ir čia tai be komentarų:

 function largestOfFour(mainArray) { return mainArray.map(function (subArray){ return subArray.reduce(function (previousLargestNumber, currentLargestNumber) { return (currentLargestNumber > previousLargestNumber) ? currentLargestNumber : previousLargestNumber; }, 0); }); } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

3 metodas: grąžinkite didžiausią masyvo skaičių su įmontuotomis funkcijomis - su žemėlapiu () ir pritaikykite ()

Šiame sprendime naudosite du metodus: Array.prototype.map () metodą ir Function.prototype.apply () metodą.

  • Taikyti () metodas reikalauja funkciją su tam tikros šios vertės ir argumentų pateikta kaip masyvas (arba masyvą panašaus objekto).

Argumentų masyvą galite perduoti funkcijai naudodami metodą taikyti () ir funkcija vykdys masyvo elementus.

Tokios funkcijos yra žinomos kaip variadinės funkcijos , ir jos gali priimti bet kokį argumentų skaičių, o ne fiksuotą.

Funkcija Math.max () pateikia didžiausią skaičių iš nulio ar daugiau ir mes galime perduoti bet kokį argumentų skaičių.

console.log(Math.max(4,5,1,3)); // logs 5

Tačiau negalite perduoti skaičių masyvo tokiam metodui:

var num = [4,5,1,3]; console.log(Math.max(num)); // logs NaN

Čia paaiškėja, kad taikymas () yra naudingas:

var num = [4,5,1,3]; console.log(Math.max.apply(null, num)); // logs 5

Atminkite, kad pirmas taikytinas argumentas () nustato „ this “, nenaudojamo šiame metode, vertę , taigi jūs perduodate null .

Dabar, kai turite metodą grąžinti didžiausią masyvo skaičių, galite pereiti per kiekvieną po masyvą naudodami žemėlapio () metodą ir grąžinti visus didžiausius skaičius.

Štai mano sprendimas su įdėtais komentarais:

 function largestOfFour(mainArray) { // Step 1. Map over the main arrays return mainArray.map(function(subArray) { // Step 3. Return the largest numbers of each sub-arrays => returns [5,27,39,1001] // Step 2. Return the largest numbers for each sub-arrays with Math.max() method return Math.max.apply(null, subArray); }); } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

Ir be komentarų:

 function largestOfFour(mainArray) { return mainArray.map(function(subArray) { return Math.max.apply(null, subArray); }); } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

Tikiuosi, kad jums tai buvo naudinga. Tai yra mano straipsnių apie „Kaip išspręsti FCC algoritmus“ tema „Laisvojo kodo stovyklos algoritmo iššūkiai“ dalis, kur aš siūlau keletą sprendimų ir žingsnis po žingsnio paaiškinu, kas vyksta po gaubtu.

Trys būdai, kaip pakartoti eilutę „JavaScript“

Šiame straipsnyje paaiškinsiu, kaip išspręsti „freeCodeCamp“ iššūkį „Pakartokite eilutę pakartokite eilutę“. Tai apima…

Du būdai patvirtinti eilutės pabaigą „JavaScript“

Šiame straipsnyje paaiškinsiu, kaip išspręsti „freeCodeCamp“ iššūkį „Patvirtinti pabaigą“.

Trys būdai, kaip pakeisti eilutę „JavaScript“

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinio algoritmo scenarijaus „Stygos pakeitimas“

Trys būdai, kaip apskaičiuoti skaičių „JavaScript“

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinio algoritmo scenarijaus „Skaičiaus nustatymas“

Du būdai patikrinti, ar „JavaScript“ nėra palindromų

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinių algoritmų scenarijų „Palindromų tikrinimas“.

Trys būdai, kaip rasti ilgiausią „JavaScript“ eilutės žodį

Šis straipsnis yra paremtas „Free Code Camp“ pagrindinių algoritmų scenarijais „Raskite ilgiausią eilutės žodį“.

Trys būdai, kaip įvesti sakinį „JavaScript“

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinio algoritmo scenarijaus „Pavadinimo atvejis sakiniu“.

Jei turite savo sprendimą ar kokių nors pasiūlymų, pasidalykite jais toliau komentaruose.

Arba galite sekti mane „ Medium“ , „Twitter“, „Github“ ir „ LinkedIn“ , iškart po to, kai spustelėsite žalią širdį žemiau ;-)

# StayCurious, # KeepOnHacking ir # MakeItHappen!

Papildomi resursai

  • už - MDN
  • masyvas. ilgis - MDN
  • žemėlapio () metodas - MDN
  • sumažinti () metodas - MDN
  • „Ternary Operator“ - MDN
  • taikyti () metodą - MDN
  • Math.max () - MDN
  • tai - MDN