Array.prototype.sort()
Die Methode Array.prototype.sort()
wird verwendet, um die Elemente eines Arrays in-place (d.h. direkt im Original-Array) zu sortieren. Diese Methode gibt das sortierte Array zurück.
Ein Schlüsselmerkmal von sort()
ist, dass sie standardmäßig Elemente als String sortiert, selbst, wenn die Elemente Zahlen sind. Aus diesem Grund führt die Methode manchmal zu unerwarteten Ergebnissen, wenn man Zahlen sortiert. Um das Verhalten zu kontrollieren, kann ein benutzerdefinierter Vergleichsalgorithmus in Form einer Callback-Funktion übergeben werden.
Syntax
Array.prototype.sort();
Array.prototype.sort(compareFn);
compareFn
(Optional) Eine Funktion, die zwei Argumente erhält und bestimmt, in welcher Reihenfolge die Elemente sortiert werden sollen.
a
: Erstes Element für den Vergleich.b
: Zweites Element für den Vergleich.wurde.
Rückgabewert
Eine Referenz auf das Original-Array. Die Methode verändert das Array in-place.
Beispiele
Einfaches Sortieren
const nums = [100, 25, 1, 15, 5];
nums.sort();
console.log(nums);
[ 1, 100, 15, 25, 5 ]
Numerische Sortierung - Vergleich
Wenn man die sort()
Methode ohne compareFn
verwendet, kann es sein, dass die Sortierung nicht den erwarteten Ergebnissen entspricht.
const nums = [10, 5, 100, 1];
nums.sort();
console.log(nums);
[ 1, 10, 100, 5 ]
In diesem Beispiel ist mathematische Reihenfolge nicht korrekt.
Im nächten Beispiel wird compareFn
verwendet.
const nums = [10, 5, 100, 1];
nums.sort((a, b) => a - b);
console.log(nums);
[ 1, 5, 10, 100 ]
Sortieren in absteigender Reihenfolge
const nums = [100, 25, 1, 15, 5];
nums.sort(function(a, b) {
return b - a;
});
console.log(nums);
[ 100, 25, 15, 5, 1 ]
Sortieren von Objekten
const users = [
{ name: 'John', age: 25 },
{ name: 'Jane', age: 20 },
{ name: 'Alice', age: 30 }
];
users.sort(function(a, b) {
return a.age - b.age;
});
console.log(users);
[
{ name: 'Jane', age: 20 },
{ name: 'John', age: 25 },
{ name: 'Alice', age: 30 }
]
Sortieren von Zeichenketten
Standardmäßig sortiert sort()
Zeichenketten lexographisch. Es gibt jedoch Fälle, in denen man eine benutzerdefinierte Sortierlogik für Zeichenketten verwenden möchte, z.B. wenn die Groß- und Kleinschreibung ignoriert werden soll.
const words = ["Banana", "apple", "Cherry"];
words.sort(function(a, b) {
return a.toLowerCase().localeCompare(b.toLowerCase());
});
console.log(words);
[ 'apple', 'Banana', 'Cherry' ]
Sortieren einer Kopie eines Arrays
Die Methode sortiert das Array direkt. Wenn man das ursprüngliche Array nicht verändern möchte, soll man zuerst eine Kopie des Arrays erstellen, bevor man die Methode anwendet.
const originalArray = [3, 1, 4, 2];
const sortedArray = [...originalArray].sort();
console.log(originalArray);
console.log(sortedArray);
[ 3, 1, 4, 2 ]
[ 1, 2, 3, 4 ]