Kolmel viisil leiate massiivi suurima arvu JavaScripti abil

Selles artiklis selgitan, kuidas lahendada Free Code Campi väljakutse Massiivide suurimate arvude tagastamine . See hõlmab suurima arvuga massiivi tagastamist igast alammassiivist.

Käsitlen kolme lähenemisviisi:

  1. FOR-silmusega
  2. kasutades reduc () meetodit
  3. kasutades Math.max ()

Algoritmi väljakutse kirjeldus

Tagastab massiivi, mis koosneb igast pakutud alammassiivist kõige suuremast arvust. Lihtsuse huvides sisaldab esitatud massiiv täpselt 4 alammassiivi.

Pidage meeles, et saate massiivi kaudu iteerida lihtsa tsükliga ja pääsete igale liikmele juurde massiivi süntaksiga arr [i].

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

Pakutakse testjuhtumeid

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

Lähenemine nr 1: tagastage massiivi suurimad arvud silmusega

Siin on minu lahendus koos sisseehitatud kommentaaridega, mis aitavad teil sellest aru saada:

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

Ja siin on see ilma minu kommentaarideta:

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

Lähenemine nr 2: tagastage massiivi suurimad numbrid koos sisseehitatud funktsioonidega - kaardiga () ja vähendage ()

Selle lahenduse jaoks kasutate kahte meetodit: meetod Array.prototype.map () ja Array.prototype.reduce ().

  • Meetod map () loob uue massiivi, mille tulemused pakuvad selle massiivi iga elemendi jaoks pakutava funktsiooni kutsumist. Kaardi kasutamine kutsub massiivi iga elemendi jaoks üks kord järjestatud tagasihelistamisfunktsiooni ja konstrueerib tulemustest uue massiivi.
  • Meetod reduc () rakendab funktsiooni akumulaatori ja massiivi iga väärtuse suhtes, et taandada see ühele väärtusele.

Kolmekomponendiliste operaator on ainus JavaScript operaator, mis võtab kolm operandi. Seda operaatorit kasutatakse if-lause otseteena.

(currentLargestNumber > previousLargestNumber) ? currentLargestNumber : previousLargestNumber;

Seda võib lugeda ka järgmiselt:

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

Siin on minu lahendus koos manustatud kommentaaridega:

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

Ja siin on see ilma kommentaarideta:

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

Lähenemine nr 3: tagastage massiivi suurimad numbrid koos sisseehitatud funktsioonidega - kaardiga () ja rakendage ()

Selle lahenduse jaoks kasutate kahte meetodit: meetod Array.prototype.map () ja meetod Function.prototype.apply ().

  • Kohaldada () meetod nõuab funktsioon etteantud see väärtus ja argumente massiivi (või massiivi-nagu objekti).

Funktsioonile saab argumentide massiivi edastada meetodi Apply () abil ja funktsioon täidab massiivi üksusi.

Selliseid funktsioone nimetatakse variaadifunktsioonideks ja nad võivad fikseeritud argumentide asemel vastu võtta suvalise arvu argumente.

Funktsioon Math.max () tagastab suurima nulli või enama arvu ja võime edastada suvalise arvu argumente.

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

Kuid te ei saa arvude massiivi sellisele meetodile edastada:

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

Siin osutub meetodiks Apply () kasulikuks:

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

Pange tähele, et esimene rakendatav argument () määrab väärtuse ' see ', mida selles meetodis ei kasutata, seega edastate null .

Nüüd, kui teil on meetod massiivi suurima arvu tagastamiseks, saate iga alammassiivi kaardi () meetodil läbi vaadata ja tagastada kõik suuremad arvud.

Siin on minu lahendus koos manustatud kommentaaridega:

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

Ja ilma kommentaarideta:

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

Loodetavasti leidsite sellest abi. See on osa minu artiklist "Kuidas lahendada FCC algoritme" Free Code Camp Algorithm Challenges, kus pakun välja mitu lahendust ja selgitan samm-sammult, mis kapoti all toimub.

Kolm viisi stringi kordamiseks JavaScriptis

Selles artiklis selgitan, kuidas lahendada freeCodeCampi väljakutse "Korda stringi kordus string". See hõlmab…

Kaks võimalust Stringi lõppu kinnitada JavaScriptis

Selles artiklis selgitan, kuidas lahendada freeCodeCampi väljakutse “Kinnita lõppu”.

Kolm viisi stringide ümberpööramiseks JavaScriptis

See artikkel põhineb Free Code Campi algoritmi skriptimisel „Stringi ümberpööramine”

Kolm viisi, kuidas arv JavaScript JavaScriptis kindlaks teha

See artikkel põhineb Free Code Campi algoritmide skriptimisel “Arvu faktoreerimine”

Kaks viisi palindroomide kontrollimiseks JavaScripti abil

See artikkel põhineb Free Code Campi algoritmi skriptimisel „Kontrolli palindroome”.

Kolm viisi, kuidas leida JavaScripti stringi kõige pikem sõna

See artikkel põhineb Free Code Campi algoritmide skriptimisel „Leidke stringi pikim sõna”.

Kolm viisi, kuidas JavaScripti laused pealkirjastada

See artikkel põhineb Free Code Campi algoritmide skriptimisel "Pealkirja juhtum lause".

Kui teil on oma lahendus või ettepanekuid, jagage neid allpool kommentaarides.

Või saate jälgida mind Medium , Twitter, Github ja LinkedIn , kohe pärast klõpsate roheline süda allpool ;-)

# StayCurious, # KeepOnHacking & # MakeItHappen!

Lisaressursid

  • poolt - MDN
  • array.length - MDN
  • kaardi () meetod - MDN
  • vähendamise () meetod - MDN
  • Kolmepoolne operaator - MDN
  • Apply () meetod - MDN
  • Math.max () - MDN
  • see - MDN