Signatur
Beschreibung
sort() ordnet die Elemente eines typisierten Arrays (z. B. Int32Array, Float64Array, BigInt64Array) direkt im vorhandenen Speicher neu an. Es wird keine Kopie erzeugt: Die Methode verändert das Array und gibt eine Referenz auf genau dieses Array zurück.
Anders als bei Array.prototype.sort() sortiert die Methode ohne Vergleichsfunktion numerisch und nicht lexikografisch nach Zeichenketten. Aus [10, 9, 1] wird also wie erwartet [1, 9, 10]. NaN-Werte landen bei Gleitkomma-Arrays am Ende, und -0 wird vor +0 einsortiert.
Mit einer eigenen Vergleichsfunktion compareFn(a, b) legst du jede beliebige Reihenfolge fest, etwa absteigend oder nach Betrag. Die Funktion gibt eine negative Zahl zurück, wenn a vor b kommen soll, eine positive, wenn a nach b kommen soll, und 0, wenn beide als gleich gelten. Seit ES2019 ist die Sortierung stabil.
Typische Einsatzgebiete sind Messwerte, Audio-Samples, Pixel- oder Geometriedaten und andere große Zahlenmengen, bei denen sich die Speicher- und Geschwindigkeitsvorteile typisierter Arrays lohnen. Wenn das Original erhalten bleiben soll, nimm toSorted() (ES2023).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $compareFn | (a: number | bigint, b: number | bigint) => number | numerisch aufsteigend | Optionale Vergleichsfunktion. Rückgabe < 0: a kommt vor b; > 0: b kommt vor a; 0: Reihenfolge bleibt erhalten. Muss eine number zurückgeben, auch bei BigInt64Array. |
Rückgabewert
Beispiele
Numerische Standardsortierung (anders als bei Array)
const werte = new Uint16Array([10, 9, 100, 1, 25]);
werte.sort();
console.log(werte);
// Zum Vergleich: normales Array sortiert als Zeichenketten
console.log([10, 9, 100, 1, 25].sort());
Absteigend sortieren mit Vergleichsfunktion
const punkte = new Float32Array([3.5, -1.25, 8, 0.5]);
punkte.sort((a, b) => b - a);
console.log(punkte);
Median aus Messwerten, Original bleibt erhalten
const messungen = new Float64Array([21.4, NaN, 19.8, 23.1, 20.5]);
// Kopie sortieren, damit das Original unverändert bleibt
const sortiert = messungen.slice().sort();
console.log(sortiert); // NaN steht am Ende
const gueltig = sortiert.filter((x) => !Number.isNaN(x));
const mitte = Math.floor(gueltig.length / 2);
const median = gueltig.length % 2
? gueltig[mitte]
: (gueltig[mitte - 1] + gueltig[mitte]) / 2;
console.log(median);
BigInt64Array: Vergleichsfunktion muss number liefern
const ids = new BigInt64Array([30n, -5n, 12n]);
// b - a wäre ein BigInt und würde einen TypeError auslösen
ids.sort((a, b) => (a < b ? 1 : a > b ? -1 : 0));
console.log(ids);
// Wichtig · Fallstricke
- Verändert das Array:
sort()arbeitet in place. Wenn sich andere Views denselbenArrayBufferteilen, sehen sie die neue Reihenfolge ebenfalls. Für eine nicht verändernde VariantetoSorted()oderslice().sort()verwenden. - Keine Zeichenketten-Sortierung: Ohne
compareFnwird numerisch sortiert. Wer Code vonArray.prototype.sort()übernimmt, braucht hier kein(a, b) => a - b. - BigInt-Arrays:
a - bergibt einBigInt, und die Umwandlung in eine Zahl löst einenTypeErroraus. Deshalb explizit-1,0oder1zurückgeben. - NaN in der Vergleichsfunktion: Gibt
compareFnNaNzurück, wird das wie0behandelt. Eine inkonsistente Vergleichsfunktion führt zu einer implementierungsabhängigen Reihenfolge. - Abgekoppelter Buffer: Auf einem Array, dessen
ArrayBufferabgekoppelt (detached) ist, löstsort()einenTypeErroraus. - Kompatibilität: Wird in allen modernen Browsern und in Node.js unterstützt. Garantiert stabil ist die Sortierung seit ES2019.
toSorted()gibt es erst ab ES2023 (Chrome 110, Firefox 115, Safari 16).