Tri su načina na koja možete pronaći najveći broj u nizu pomoću JavaScript-a

U ovom ću članku objasniti kako riješiti izazov Free Return Camp-a "Vrati najveće brojeve u nizove " . To uključuje vraćanje niza s najvećim brojevima iz svakog od nizova.

Tri su pristupa koja ću opisati:

  1. s FOR petljom
  2. pomoću metode reduce ()
  3. pomoću Math.max ()

Opis izazova za algoritam

Vrati niz koji se sastoji od najvećeg broja iz svakog navedenog pod-niza. Radi jednostavnosti, pruženi niz sadržavat će točno 4 podniza.

Zapamtite, možete itirati kroz niz pomoću jednostavne for petlje i pristupiti svakom članu s sintaksom niza arr [i].

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

Dati test slučajevi

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

Pristup br. 1: Vrati najveće brojeve u niz s petljom For

Evo mog rješenja s ugrađenim komentarima koji će vam pomoći da ga razumijete:

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

I ovdje je bez mojih komentara:

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

Pristup br. 2: Vrati najveće brojeve u nizu s ugrađenim funkcijama - s mapom () i smanji ()

Za ovo ćete rješenje koristiti dvije metode: metodu Array.prototype.map () i metodu Array.prototype.reduce ().

  • Metoda map () stvara novi niz s rezultatima pozivanja zadane funkcije na svakom elementu u ovom nizu. Korištenje mape pozvat će pruženu funkciju povratnog poziva jednom za svaki element u nizu, redom, i iz rezultata konstruira novi niz.
  • Metoda reduce () primjenjuje funkciju na akumulator i svaku vrijednost niza kako bi je smanjila na jednu vrijednost.

Trojnog operater je jedini JavaScript operater koji traje tri operanda. Ovaj se operator koristi kao prečac za naredbu if.

(currentLargestNumber > previousLargestNumber) ? currentLargestNumber : previousLargestNumber;

To se također može čitati kao:

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

Evo mog rješenja s ugrađenim komentarima:

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

I ovdje je bez komentara:

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

Pristup br. 3: Vrati najveće brojeve u niz s ugrađenim funkcijama - s mapom () i primijeni ()

Za ovo ćete rješenje koristiti dvije metode: metodu Array.prototype.map () i metodu Function.prototype.apply ().

  • Metoda apply () poziva funkciju s zadanom ovom vrijednošću i argumente pružene kao niz (ili objekt sličan nizu).

Možete proslijediti niz argumenata funkciji pomoću metode apply () i funkcija će izvršiti stavke u polju.

Takve su funkcije poznate kao varijadne funkcije i mogu prihvatiti bilo koji broj argumenata umjesto fiksnog.

Funkcija Math.max () vraća najveći od nula ili više brojeva i možemo proslijediti bilo koji broj argumenata.

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

Ali ne možete proslijediti niz brojeva metodi poput ove:

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

Ovdje se pokazalo da je metoda apply () korisna:

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

Imajte na umu da prvi argument za primjenu () postavlja vrijednost ' this ', koja se ne koristi u ovoj metodi, tako da prosljeđujete nulu .

Sada kada imate metodu za vraćanje najvećeg broja u nizu, možete petlju proći kroz svaki niz s metodom map () i vratiti sve najveće brojeve.

Evo mog rješenja s ugrađenim komentarima:

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

I bez komentara:

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

Nadam se da vam je ovo pomoglo. Ovo je dio moje serije članaka "Kako riješiti FCC algoritme" o izazovima Algoritma slobodnog koda, gdje predlažem nekoliko rješenja i korak po korak objašnjavam što se događa ispod haube.

Tri načina za ponavljanje niza u JavaScript-u

U ovom ću članku objasniti kako riješiti izazov FreeCodeCampa "Ponovi niz ponavljaj niz". To uključuje ...

Dva načina za potvrđivanje završetka niza u JavaScript-u

U ovom ću članku objasniti kako riješiti izazov "Potvrdi završetak" freeCodeCampa.

Tri načina za preokret niza u JavaScript-u

Ovaj se članak temelji na skripti skripta algoritma Free Code Camp "Obrni niz"

Tri načina za faktorizaciju broja u JavaScript-u

Ovaj se članak temelji na skripti za osnovni algoritam Free Code Camp “Faktorizacija broja”

Dva načina za provjeru palindroma u JavaScript-u

Ovaj se članak temelji na skripti skripta algoritma Free Code Camp "Provjeri palindrome".

Tri načina za pronalaženje najduže riječi u nizu u JavaScript-u

Ovaj se članak temelji na skripti za osnovni algoritam Free Code Camp “Pronađi najdužu riječ u nizu”.

Tri načina naslova rečenice u JavaScript-u

Ovaj se članak temelji na skriptiranju osnovnog algoritma Free Code Camp, „Naslov slučaja rečenica“.

Ako imate svoje rješenje ili bilo kakve prijedloge, podijelite ih u nastavku u komentarima.

Ili me možete pratiti na Mediumu , Twitteru, Githubu i LinkedInu , odmah nakon što kliknete zeleno srce ispod ;-)

# Ostanite znatiželjni, # KeepOnHacking & # MakeItHappen!

Dodatna sredstva

  • za - MDN
  • niz.duljina - MDN
  • map () metoda - MDN
  • metoda smanjivanja () - MDN
  • Ternarni operater - MDN
  • metoda apply () - MDN
  • Math.max () - MDN
  • ovo - MDN