In JavaScript können Sie den integrierten Maximalwert von Math.max () verwenden, aber es ist immer noch schwierig, den Maximalwert aus mehreren Arrays zu extrahieren.
Problembeschreibung
Angenommen, Sie haben ein Array, und dieses Array enthält eine Teilestarren von Zahlen, und wir möchten die größte maximale Zahl von jedem Subtarray im Array zurückgeben.
Grundlösung
Funktion LargeOffour (arr) {var resultes = []; // Erstellen Sie eine Ergebnisvariable zum Speichern // Erstellen Sie eine äußere Schleife, um das äußere Array für (var n = 0; n <arr.length; n ++) {var largenumber = 0; // Erstellen Sie eine zweite Variable, um die größte Zahl zu speichern // Erstellen Sie eine andere Schleife, um das Subtarray für (var sb = 0; sb <arr [n]. Länge; SB ++) {// Überprüfen Sie, ob das Element des Subarrays größer als der aktuelle maximal gespeicherte Wert ist. arr [n] [sb];}} // speichern nach einer internen Schleife den Wert in jedem Subtarray auf die Ergebnisse der Array -Ergebnisse [n] = largenumber;} // Return the Array Return -Ergebnisse;} größtenteils ([[1,34], [456,2, 2, 234], [4567,1]. // [34, 456, 4567, 78]Die obige Methode ist eine normale Lösung, die das Array und seine Subtarrays durch zwei für Schleifen durchquert:
Erstellen Sie eine Ergebnisvariable, um den Maximalwert zu speichern, der in jedem Subtarray durchquert wird
Erstellen Sie eine äußere Schleife zum Durchqueren von äußeren Arrays
Erstellen Sie eine zweite Variable, Largenumber, um den Maximalwert zu speichern. Dieser variable Wert muss außerhalb der internen für die Schleife platziert werden, da er nicht neu zugewiesen wird
Erstellen Sie eine Sekunde für die Schleife, die jedes Element im Subtarray durchträgt
Eine Anweisung wird verwendet, um zu bestimmen, ob das Element des aktuellen Subarrays größer ist als der im aktuelle Subtarray gespeicherte Maximalwert. Wenn wahr, speichern Sie diesen Maximalwert auf Largenumber.
Nachdem die interne Schleife beendet ist
Schließlich geben Sie das Ergebnisarray zurück
Nachdem Sie jeden Maximalwert in allen Subtarrays herausgenommen haben, erhalten Sie ein neues Array -Ergebnis. Zu diesem Zeitpunkt müssen Sie nur bestehen:
Array.prototype.max = function () {return math.max.apply ({}, this);} fevstOffOur (arr) .max ();Sie können den Höchstwert erhalten.
Largeoffour ([[1,34], [456,2,3,44,234], [4567,1,4,5,6], [34,78,23,1]]). max (); // 4567
Zwischenlösung
Funktion LargeOffour (arr) {// Verwenden Sie die MAP () -Methode und die Rückruffunktion, um die maximalen Werte im Subtarray zusammen zu kombinieren, um ein neues Array -Rückgabe -arr.map (Funktion (Gruppe) zu erhalten {// Reduzierung der Methode verwenden, um den maximalen Wert in jedem Subarray auf die Gruppenarray -Rückgabegruppe zurückzugeben. Prev;});});});} Großstufe ([[1,34], [456,2,3,44,234], [4567,1,4,5,6], [34,78,23,1]]); // [34, 456, 4567, 78]Verwenden Sie die Methode array.prototype.map (), um das Array im äußeren Array zu iterieren. Verwenden Sie die Methode map (), um das Array zu durchqueren, und eine Rückruffunktion wird aufgerufen. In dieser Rückruffunktion wird jede Subtarray -Gruppe mit der Methode record () zusammengeführt, um den Wert an ein neues Array zurückzugeben. Bei der Verwendung der Vertrag () -Methode wird auch eine Rückruffunktion aufgerufen. Diese Rückruffunktion macht nur eine Sache, nämlich die Elemente im Subtarray. Wenn der Strom größer als die Vorhilfe ist, wird der Strom zurückgegeben, andernfalls wird die Vorschriften zurückgegeben, und der Maximalwert in jedem Subtarray wird erhalten.
Nach wie vor wird der Höchstwert schließlich über Math.max.Apply () erhalten.
Die beste Lösung
Funktion LargeOffour (arr) {return arr.map (function.apply.bind (math.max, null)); // [34, 456, 4567, 78]In diesem Schema wird die Funktion der Funktion.
Iterieren Sie zuerst über jedes Element im Hauptarray, dh jedes Subtarray im Array
Die Verwendung der Methode MAP () erfordert eine Rückruffunktion, um den Maximalwert in jedem Array im Inneren zu finden. Sie müssen eine Funktion erstellen, mit der Math.max ein Eingabearray -Arbeit akzeptiert. Mit anderen Worten, dies ist sehr einfach und funktioniert sehr gut, wie Math.max ([9,43,20,6]); Gibt den Maximalwert von 43 zurück
Die function.Prototype.Apply -Methode kann Arrays als Parameter akzeptieren, aber die Funktion verwendet den Aufrufkontext, der etwas kompliziert ist. Beispielsweise wird Math.max.Apply (NULL, [9,43,20,6]) eine max.max -Methode aufrufen, aber eine solche Methode ist nicht einfach zu finden.
Hier wird ein NULL -Parameter an die Funktion übergeben.
Da arr.map () eine Rückruffunktion benötigt, nicht nur einen Ausdruck, geben wir eine Funktion in der Funktion der Funktion.bind an
Da Function.Prototype.Apply eine statische Methode ist, ähnlich wie bei einem Funktionsobjekt, können wir es Funktion.Prototype.bind gebunden an function.prototype.apply aufrufen. Zum Beispiel: function.apply.bind
Sein Kontext kann nun über die Funktion der Funktion.Prototype.Apply.bind -Rückruffunktion angegeben werden, wie z.
Da es in die Funktion der Funktion eingebettet ist.
Deshalb geben wir Null als zweiter Parameter an function.prototype.apply.bind und binden einen Kontext, der die math.max -Methode ist
Da Math.max unabhängig von einem Kontext ist, ignoriert es den gefälschten Kontext der Funktion.
Wir verwenden Funktion.Prototype.apply.bind (math.max, null), um eine neue Funktion zu erstellen,
Nehmen Sie den Maximalwert in einem mehrdimensionalen Array
Das obige verwendet verschiedene Methoden, um die maximalen Werte aus dem Subtarray aus einem zweidimensionalen Array zu extrahieren und diese maximalen Werte in ein neues Array umzusetzen. Wenn Sie es erweitern, müssen Sie auch die Funktion array.prototype.max verwenden, um den Maximalwert über Math.max.apply ({}, dies) in der Funktion zu erhalten. Wenn es sich jedoch nicht um ein zweidimensionales Array handelt, kann die obige Methode nicht den größten Wert im Array abrufen.
Um den Maximalwert in einem mehrdimensionalen Array zu erhalten, können Sie ihn mit den Methoden join () und split () kombinieren:
Funktion LargeOffour (arr) {var newarray = arr.join (","). split (","); return Math.max.Apply ({}, newarray);} feamstoffour ([12,23]); // => 23 Largestoffour ([12,23, [1234,324], [345,566]]); // => 1234 LargestOfOffOur ([12,23, [1234,324, [23121,90890]], [345,566, [345,78,90]]]); // => 1234 LargestOfOffOur ([12,23, [1234,324, [23121,90890]], [345,566, [345,78,90]]]); // => 90890 Largestoffour ([12,23, [1234,324, [23121,90890]], [345,566, [345,78,90, [90909090,988]]]]]); // => 9090909090Sie können auch eine ähnliche Methode verwenden, um den Mindestwert in einem mehrdimensionalen Array zu entfernen:
function kleineroffour (arr) {var newarray = arr.join (","). split (","); return math.min.apply ({}, newArray);} kleinere Offour ([12,23]); // => 12smalleroffour ([112,23, [1234,324], [345,566]]); // => 23SmallerOffour ([212,123, [1234,324, [23121,90890]], [345,566, [345,78,90]]]); // => 23SmallerOffour ([212,123, [1234,324, [23121,90890]], [345,566, [345,78,90]]]); // => 78SmallerOffour ([102,230, [1234,324, [23121,90890]], [345,566, [345,78,90, [90909090,988]]]]); // => 78Zusammenfassen
In dem Artikel "JavaScript Learning Notes: Maximal- und Mindestwerte in Arrays" wird math.max.apply ({}, arr) eingeführt, um die größte Zahl in einem Array zu erhalten. In diesem Artikel wird vorgestellt, wie die größte Zahl aus einem zweidimensionalen Array aus verschiedenen Blickwinkeln extrahiert werden kann. In vielen Fällen haben Arrays jedoch auch mehrdimensionale Arrays. Der Artikel führt letztendlich vor, wie der größte Wert aus einem mehrdimensionalen Array extrahiert werden kann. Wenn Sie mehr Lösungen haben, teilen Sie sie uns bitte in den Kommentaren mit.