Drei Möglichkeiten, wie Sie mit JavaScript die größte Anzahl in einem Array finden können

In diesem Artikel werde ich erklären, wie die Herausforderung „Größte Zahlen in Arrays zurückgeben “ von Free Code Camp gelöst werden kann . Dies beinhaltet die Rückgabe eines Arrays mit den größten Zahlen von jedem der Unterarrays.

Es gibt drei Ansätze, die ich behandeln werde:

  1. mit einer FOR-Schleife
  2. mit der Methode redu ()
  3. mit Math.max ()

Die Beschreibung der Algorithmus-Herausforderung

Geben Sie ein Array zurück, das aus der größten Anzahl jedes bereitgestellten Unterarrays besteht. Der Einfachheit halber enthält das bereitgestellte Array genau 4 Unterarrays.

Denken Sie daran, dass Sie ein Array mit einer einfachen for-Schleife durchlaufen und mit der Array-Syntax arr [i] auf jedes Mitglied zugreifen können.

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

Bereitgestellte Testfälle

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

Ansatz 1: Geben Sie die größten Zahlen in einem Array mit einer For-Schleife zurück

Hier ist meine Lösung mit eingebetteten Kommentaren, die Ihnen das Verständnis erleichtern:

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

Und hier ist es ohne meine Kommentare:

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

Ansatz 2: Geben Sie die größten Zahlen in einem Array mit integrierten Funktionen zurück - mit map () und redu ()

Für diese Lösung verwenden Sie zwei Methoden: die Methode Array.prototype.map () und die Methode Array.prototype.reduce ().

  • Die map () -Methode erstellt ein neues Array mit den Ergebnissen des Aufrufs einer bereitgestellten Funktion für jedes Element in diesem Array. Wenn Sie map verwenden, wird eine bereitgestellte Rückruffunktion einmal für jedes Element in einem Array der Reihe nach aufgerufen und aus den Ergebnissen ein neues Array erstellt.
  • Die Methode redu () wendet eine Funktion auf einen Akkumulator und jeden Wert des Arrays an, um ihn auf einen einzelnen Wert zu reduzieren.

Der ternäre Operator ist der einzige JavaScript-Operator, der drei Operanden akzeptiert. Dieser Operator wird als Verknüpfung für die if-Anweisung verwendet.

(currentLargestNumber > previousLargestNumber) ? currentLargestNumber : previousLargestNumber;

Dies kann auch gelesen werden als:

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

Hier ist meine Lösung mit eingebetteten Kommentaren:

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

Und hier ist es ohne Kommentare:

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

Ansatz 3: Geben Sie die größten Zahlen in einem Array mit integrierten Funktionen zurück - mit map () und apply ()

Für diese Lösung verwenden Sie zwei Methoden: die Methode Array.prototype.map () und die Methode Function.prototype.apply ().

  • Die Methode apply () ruft eine Funktion mit einem bestimmten Wert und Argumenten auf, die als Array (oder als Array-ähnliches Objekt) bereitgestellt werden.

Sie können ein Array von Argumenten mit der Methode apply () an eine Funktion übergeben , und die Funktion führt die Elemente im Array aus.

Solche Funktionen sind als variadische Funktionen bekannt und können eine beliebige Anzahl von Argumenten anstelle eines festen akzeptieren.

Die Funktion Math.max () gibt die größte von null oder mehr Zahlen zurück, und wir können eine beliebige Anzahl von Argumenten übergeben.

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

Sie können der Methode jedoch kein Array von Zahlen wie folgt übergeben:

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

Hier erweist sich die Methode apply () als nützlich:

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

Beachten Sie, dass das erste Argument für apply () den Wert ' this ' festlegt, der in dieser Methode nicht verwendet wird. Sie übergeben also null .

Nachdem Sie nun eine Methode zum Zurückgeben der größten Zahl in einem Array haben, können Sie jedes Unterarray mit der map () -Methode durchlaufen und alle größten Zahlen zurückgeben.

Hier ist meine Lösung mit eingebetteten Kommentaren:

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

Und ohne Kommentare:

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

Ich hoffe, Sie fanden das hilfreich. Dies ist Teil meiner Artikelserie „Wie man FCC-Algorithmen löst“ zu den Herausforderungen des Free Code Camp-Algorithmus, in der ich verschiedene Lösungen vorschlage und Schritt für Schritt erkläre, was unter der Haube passiert.

Drei Möglichkeiten, eine Zeichenfolge in JavaScript zu wiederholen

In diesem Artikel werde ich erklären, wie Sie die Herausforderung "Wiederholen eines Strings, Wiederholen eines Strings" von freeCodeCamp lösen. Das beinhaltet…

Zwei Möglichkeiten, um das Ende eines Strings in JavaScript zu bestätigen

In diesem Artikel werde ich erklären, wie Sie die Herausforderung „Confirm the Ending“ von freeCodeCamp lösen können.

Drei Möglichkeiten, einen String in JavaScript umzukehren

Dieser Artikel basiert auf dem Free Algorithmus Camp Basic Algorithm Scripting „Reverse a String“.

Drei Möglichkeiten, eine Zahl in JavaScript zu faktorisieren

Dieser Artikel basiert auf dem Free Algorithmus Camp Basic Algorithm Scripting „Factorialize a Number“.

Zwei Möglichkeiten, in JavaScript nach Palindromen zu suchen

Dieser Artikel basiert auf dem Free Code Camp Basic Algorithm Scripting „Auf Palindrome prüfen“.

Drei Möglichkeiten, das längste Wort in einer Zeichenfolge in JavaScript zu finden

Dieser Artikel basiert auf dem Free Algorithmus Camp Basic Algorithm Scripting „Finde das längste Wort in einer Zeichenfolge“.

Drei Möglichkeiten, einen Satz in JavaScript zu betiteln

Dieser Artikel basiert auf dem Free Algorithmus Camp Basic Algorithm Scripting „Title Case a Satz“.

Wenn Sie eine eigene Lösung oder Vorschläge haben, teilen Sie diese unten in den Kommentaren mit.

Oder du kannst mir auf Medium , Twitter, Github und LinkedIn folgen , gleich nachdem du auf das grüne Herz unten geklickt hast ;-)

# StayCurious, # KeepOnHacking & # MakeItHappen!

Zusätzliche Ressourcen

  • für - MDN
  • array.length - MDN
  • map () -Methode - MDN
  • redu () -Methode - MDN
  • Ternärer Operator - MDN
  • apply () -Methode - MDN
  • Math.max () - MDN
  • dies - MDN