Sortieren ein Array von Ganzzahlen in JavaScript
-
Sortieren Sie ein Array von Ganzzahlen in JavaScript mit der
.sort
-Methode - Übergeben einer Vergleichsfunktion als Parameter
- Sortieren ein Array von Ganzzahlen in JavaScript mit der Pfeilfunktion
Dieses Tutorial stellt die Methode .sort
vor, die zum Sortieren eines Arrays nach einer bestimmten Reihenfolge verwendet werden kann, und erklärt, warum diese Methode eine Vergleichsfunktion benötigt, wenn Sie ein Array aus ganzen Zahlen korrekt sortieren möchten.
Diese Vergleichsfunktion bestimmt die Sortierreihenfolge. Außerdem erklären wir, wie man es verwendet, um eine Sortierung in absteigender Reihenfolge vorzunehmen, sowie eine kürzere Möglichkeit, alles zusammen zu verwenden, indem man die Vergleichsfunktion als Pfeilfunktion innerhalb der Methode .sort
verwendet.
Sortieren Sie ein Array von Ganzzahlen in JavaScript mit der .sort
-Methode
Die Methode .sort
ist eine Methode der Entität Array
, die ein geordnetes Array aus dem Array zurückgibt, das diese Methode ursprünglich aufgerufen hat. Beispielsweise:
// Input
let array = [10, 10000, 1000, 100, 1]
console.log(array.sort())
Ausgabe:
// Output
[ 1, 10, 100, 1000, 10000 ]
Sicher, dies wird erwartet, da die Methode .sort
das Array ordnet. Aber, wenn wir die folgende Eingabe haben:
// Input
let array = [12900, 877, 12, 992, 10000]
console.log(array.sort())
Wir haben eine falsche Reihenfolge wie folgt:
// Output
[10000, 12, 12900, 877, 992]
Dies liegt daran, dass die Standardreihenfolge von .sort
auf dem UTF-16
oder 16-Bit Unit Transformation Format
basiert, das eine Codierung des Unicode-Musters ist. Die Methode konvertiert die Array-Werte in den String-Typ und ordnet dann ihre Unicode-Werte.
Mit dieser Erklärung kann die Methode .sort
auch verwendet werden, um andere Datentypen zu ordnen, nicht nur Zahlen.
Aber wie kann die Methode .sort
verwendet werden, um ein Array richtig zu ordnen? Ganz einfach: mit einer Vergleichsfunktion.
Übergeben einer Vergleichsfunktion als Parameter
Da die Methode .sort
ohne Parameter verwendet werden kann, ist eine Vergleichsfunktion optional. Grundsätzlich definiert diese Funktion die Reihenfolge der Methode .sort
, und diese Funktion empfängt zwei Parameter: das erste zu vergleichende Element und das zweite zu vergleichende Element.
Die .sort
-Methode wird:
- Setzen Sie
first
nachsecond
, wenn diecompareFunction
einen Wert grösser als 0 zurückgibt; - Setzen Sie
first
vorsecond
, wenn diecompareFunction
einen Wert kleiner als 0 zurückgibt; - Nichts tun, wenn die
compareFunction
einen Wert gleich 0 zurückgibt.
Mit der compareFunction(first, second)
können wir also die Reihenfolge der Sortierung bestimmen, indem wir eine Operation zwischen den Parametern first
und second
übergeben. Zu aufsteigender Reihenfolge,
// Ascending ordering
function compareFunction(first, second) {
if (first > second)
return 1 // 1 is greater than 0, so .sort will put first after second.
if (first < second) return -1 // -1 is less than 0, so .sort will put first
// before second.
return 0
}
Und für absteigende Reihenfolge können wir die Operatoren umkehren.
// Descending ordering
function compareFunction(first, second) {
if (first < second)
return 1 // 1 is greater than 0, so .sort will put first after second.
if (first > second) return -1 // -1 is less than 0, so .sort will put first
// before second.
return 0
}
Wenn wir nun compareFunction
für aufsteigende Sortierung zusammen mit der .sort
-Methode einsetzen, haben wir schließlich:
// Input:
let array = [12900, 877, 12, 992, 10000]
// Ascending
array.sort(function compareFunction(first, second) {
if (first > second)
return 1 // 1 is greater than 0, so .sort will put first before second.
if (first < second) return -1 // -1 is less than 0, so .sort will put first
// after second.
return 0
})
console.log(array)
Ausgabe:
// Output:
[ 12, 877, 992, 10000, 12900 ]
Sortieren ein Array von Ganzzahlen in JavaScript mit der Pfeilfunktion
Wir können auch den gesamten Codeblock auf eine minimale Syntax reduzieren, indem wir Arrow-Funktionen verwenden.
Eine Pfeilfunktion ist eine weitere Möglichkeit, eine Funktion mit kürzerer Syntax zu verwenden. Pfeilfunktionen sind anonyme Funktionen, und das bedeutet, dass sie nicht benannt sind (in Variablen gespeichert oder als Funktionsparameter übergeben werden) und nicht in allen Situationen verwendet werden können.
Mit der Struktur einer Pfeilfunktion können die traditionellen Funktionen in einen kürzeren Block umgewandelt werden, wie das Beispiel zeigt:
// Common anonymous function
function(x) {
return x + 1;
}
// Arrow function
(x) => x + 1
Außerdem kann die Struktur einer Pfeilfunktion automatisch den Ausdruckswert ohne das reservierte Wort return
zurückgeben:
// Arrow function
let arrowFunction = (x) => x + 1
console.log(arrowFunction(1))
Ausgabe:
//Output
2
Die console.log()
gibt den Wert 1 + 1
aus, also 2
, obwohl die arrowFunction
die return
-Anweisung nicht verwendet. Es wird uns im nächsten Schritt helfen.
Wie gesagt, die .sort
-Methode kann eine Vergleichsfunktion enthalten, und diese Funktion kann eine Pfeilfunktion sein. Durch Konvertieren der vorherigen Vergleichsfunktionsstruktur können wir den gesamten Codeblock wie folgt in einen kürzeren Block umwandeln:
// Input:
let array = [10000, 10, 100, 1000, 1]
array.sort((first, second) => {
if (first > second) return 1
return -1
})
// Ascending: If first > second == true, then change one by the other.
console.log(array)
Wir können die Bedingung auf first < second
fallen lassen und stattdessen einen -1
-Wert als Standardwert zurückgeben, wenn die primäre Bedingung nicht der Fall ist; Da der Wert 0
für die Methode .sort
gleich ist, können sie ihre Position ändern, ohne das Endergebnis zu beeinflussen. Auf diese Weise können wir noch mehr reduzieren, wie im folgenden Beispiel:
// Input:
let array = [10000, 10, 100, 1000, 1]
array.sort((first, second) => first > second ? 1 : -1)
// Ascending: If first > second == true, then change one by the other.
console.log(array)
Sehen Sie, dass der vorherige >
-Vergleich und die Voreinstellung Zurück
in nur einen Vergleich geändert wurden: first > second ? 1 : -1
. Das bedeutet, dass, wenn der Vergleich true
ist, 1
zurückgegeben wird; wenn nicht, gibt es -1
zurück.
Wir brauchen die ?
ternärer Operator, weil der Vergleich first > second
nur true
oder false
ergibt. Aber wie gesagt, die Methode .sort
erwartet 1
, -1
oder 0
.
Ausgabe:
// Output:
[ 1, 10, 100, 1000, 10000 ]
Und für absteigende Reihenfolge:
// Input:
let array = [10000, 10, 100, 1000, 1]
array.sort((first, second) => first < second ? 1 : -1)
// Descending: If first < second == true, then change one by the other.
console.log(array)
Ausgabe:
// Output:
[ 10000, 1000, 100, 10, 1 ]
Eine andere Möglichkeit, dasselbe zu tun, ist die Verwendung des ternären Operators -
für die Subtraktion. Wenn wir array.sort((first, second) => first > second ? 1 : -1)
verwenden und first - second
einen Wert grösser als 0 ergeben, dann ändert sich ein Index untereinander. Wenn first - second
einen Wert kleiner als 0 ergibt, passiert nichts, und bei gleichen Werten gibt der Vergleich 0
zurück.
Beispiel:
// Input:
let array = [10000, 10, 100, 1000, 1]
console.log(array.sort((first, second) => first - second))
Ausgabe:
// Output:
[ 1, 10, 100, 1000, 10000 ]
Was können wir in absteigender Reihenfolge tun? Nein, es ändert nicht den ternären Operator -
in +
, da jede positive Zahl plus eine weitere positive Zahl einen Wert größer als 0 ergibt. Aber wir haben eine einfache Lösung dafür: Invertieren Sie first > second
in second - first
.
Wenn also second – first
einen Wert grösser als 0 ergibt, tauscht die .sort-Methode ihre Positionen untereinander aus.
Beispiel:
// Input:
let array = [10000, 10, 100, 1000, 1]
console.log(array.sort((first, second) => second - first))
Ausgabe:
// Output:
[ 10000, 1000, 100, 10, 1 ]
Verwandter Artikel - JavaScript Array
- Überprüfen Sie, ob das Array einen Wert in JavaScript enthält
- Array mit bestimmter Länge in JavaScript erstellen
- Konvertieren ein Array in einen String in JavaScript
- Erstes Element aus einem Array in JavaScript entfernen
- Objekte aus einem Array in JavaScript suchen
- Konvertieren von Argumenten in ein Array in JavaScript