#Neuigkeiten
#JS-3: sort()
von Rashid Bairamov
Kurz gesagt
Die Methode sort() sortiert die Elemente eines Arrays, indem sie die Reihenfolge der Elemente im Ausgangsarray ändert. Standardmäßig wird in aufsteigender Reihenfolge sortiert. Jedes Element des Arrays wird in einen String sortiert und die Ergebnisse werden miteinander verglichen.
Die sort()-Methode ist stabil, d.h. die Elemente werden bei wiederholten Sortierungen garantiert die gleichen Positionen einnehmen.
Um die Logik des Elementvergleichs anzupassen, kann eine Komparatorfunktion übergeben werden. Die Funktion definiert, wie ein Paar von Elementen miteinander verglichen wird.
Die Methode gibt eine Referenz auf das ursprüngliche Array zurück.
Beispiel einer Standardsortierung
const nums = [15, 0, 4]
const strings = ['a', 'c', 'b']
nums.sort()
console.log(nums)
// [0, 15, 4]
strings.sort()
console.log(strings)
// ['a', 'b', 'c']
Wie wird geschrieben
Die Methode hat nur einen optionalen Parameter - die Vergleichsfunktion sort(compareFn).
Der Vergleichsfunktion werden zwei Argumente a und b übergeben. Das Ergebnis des Vergleichs des Rückgabewerts der Funktion mit 0 bestimmt die Reihenfolge der Elemente:
- Ein Wert kleiner 0 bedeutet, dass Element a kleiner als Element b ist;
- Ein Wert größer als 0 bedeutet, dass Element a größer als Element b ist;
- Ein Wert gleich 0 bedeutet, dass die Elemente gleich sind.
Alle Arrayelemente mit undefiniertem Wert werden nach der Sortierung an das Ende des Arrays sortiert. Für diese Elemente wird die Funktion compareFn() nicht aufgerufen.
Beispiel für eine Komparatorfunktion zum Sortieren von Zahlen
function compareFn(a, b) {
if (a < b) {
return -1
} else if (a > b) {
return 1
}
// a === b
return 0
}
Da nur das Vorzeichen des Rückgabewertes wichtig ist, können wir vereinfachen:
function compareFn(a, b) {
return a - b
}
Er kann auch über die Pfeilfunktion ermittelt werden:
const compareFn = (a, b) => a - b
Beispiel für die Sortierung von Zahlen in aufsteigender Reihenfolge
const nums = [3, 4, 0]
const compareFn = (a, b) => a - b
nums.sort(compareFn)
console.log(nums)
// [0, 3, 4]
Beispiel für die Sortierung von Zahlen in absteigender Reihenfolge
const nums = [3, 4, 0]
// Im Gegensatz zur Sortierung in aufsteigender Reihenfolge wird hier das erste Element vom zweiten Element subtrahiert.
const compareFn = (a, b) => b - a
nums.sort(compareFn)
console.log(nums)
// [4, 3, 0]
Wie zu verstehen
Die Methode sort() funktioniert genauso wie die Methode toSorted(). Der Hauptunterschied besteht darin, dass die Methode sort() das ursprüngliche Array ändert, während die Methode toSorted() ein neues Array mit sortierten Elementen zurückgibt.
const nums = [20, 1, -10]
const toSortedNums = nums.toSorted((a, b) => a - b)
console.log(nums)
// [20, 1, -10]
console.log(toSortedNums)
// [-10, 1, 20]
const sortedNums = nums.sort((a, b) => a - b)
console.log(nums)
// [-10, 1, 20]
console.log(sortedNums)
// [-10, 1, 20]
console.log(nums === sortedNums)
// true