Signatur
Beschreibung
Der Konstruktor Intl.Collator() erzeugt ein Objekt, das Zeichenketten nach sprachspezifischen Regeln vergleicht. Die zentrale Methode ist compare(a, b). Sie gibt eine negative Zahl, 0 oder eine positive Zahl zurück und lässt sich deshalb direkt an Array.prototype.sort() übergeben.
Das ist wichtig, weil der Standardvergleich von sort() oder der Operatoren </> nur UTF-16-Codeeinheiten vergleicht. Dann steht zum Beispiel „Zebra“ vor „apfel“, und „Äpfel“ landet hinter „Zucker“. Ein Collator kennt die Sortierregeln der jeweiligen Sprache (z. B. Umlaute im Deutschen oder „å“ im Schwedischen). Außerdem kann er Groß- und Kleinschreibung oder Akzente ignorieren, Zahlen in Texten „natürlich“ sortieren (numeric) und zwischen Sortieren und Suchen unterscheiden (usage).
Der Konstruktor kann mit oder ohne new aufgerufen werden. In beiden Fällen entsteht ein neues Objekt. Wenn Sie viele Zeichenketten vergleichen (große Arrays sortieren), erzeugen Sie einmal einen Collator und verwenden ihn mehrfach. Das ist deutlich schneller als wiederholte Aufrufe von String.prototype.localeCompare() mit Optionen, weil dort jedes Mal intern ein neuer Collator entsteht.
Mit resolvedOptions() sehen Sie, welche Locale und welche Optionen tatsächlich verwendet werden. Mit Intl.Collator.supportedLocalesOf() prüfen Sie, welche Locales die Laufzeitumgebung unterstützt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $locales | string | string[] | Intl.Locale | undefined | Standard-Locale der Laufzeitumgebung | BCP-47-Sprachcode (z. B. "de", "de-DE", "sv") oder eine Liste davon, geordnet nach Priorität. Unicode-Erweiterungen sind möglich, z. B. "de-u-co-phonebk" (Telefonbuch-Sortierung) oder "de-u-kn-true" (numerisch). |
| $options | object | {} | Konfigurationsobjekt mit folgenden Eigenschaften:
|
Rückgabewert
Intl.Collator-Objekt. Seine gebundene Methode compare kann direkt an sort() übergeben werden.Beispiele
Deutsche Wörter korrekt sortieren
const woerter = ['Zucker', 'apfel', 'Äpfel', 'Banane', 'ähnlich'];
// Standard-Sortierung: vergleicht nur Codeeinheiten
console.log([...woerter].sort());
// Sprachspezifisch mit Collator
const collator = new Intl.Collator('de');
console.log([...woerter].sort(collator.compare));
Natürliche Sortierung von Dateinamen mit numeric
const dateien = ['bild10.png', 'bild2.png', 'bild1.png', 'Bild3.png'];
const natuerlich = new Intl.Collator('de', {
numeric: true,
sensitivity: 'base'
});
console.log(dateien.sort(natuerlich.compare));
Suche ohne Rücksicht auf Groß-/Kleinschreibung und Akzente
const suche = new Intl.Collator('de', { usage: 'search', sensitivity: 'base' });
const staedte = ['München', 'Köln', 'Zürich', 'Genève'];
const eingabe = 'geneve';
const treffer = staedte.filter((s) => suche.compare(s, eingabe) === 0);
console.log(treffer);
console.log(suche.compare('Straße', 'STRASSE'));
Aufgelöste Optionen und Telefonbuch-Sortierung
const tel = new Intl.Collator('de-u-co-phonebk');
console.log(tel.resolvedOptions().collation);
// Im Telefonbuch-Modus wird „ä“ wie „ae“ behandelt
console.log(['Mueller', 'Müller', 'Muster'].sort(tel.compare));
console.log(Intl.Collator.supportedLocalesOf(['de', 'xx-YY', 'sv']));
// Wichtig · Fallstricke
- Leistung: Erzeugen Sie für große Sortiervorgänge einen einzigen Collator und verwenden Sie ihn wieder, statt in der Vergleichsfunktion
localeCompare()mit Optionen aufzurufen. Das kann um ein Vielfaches schneller sein. compareist ein gebundener Getter.arr.sort(collator.compare)funktioniert daher ohne.bind().- Die genauen Rückgabewerte von
comparesind nicht festgelegt (nicht unbedingt-1/1). Prüfen Sie nur auf< 0,=== 0oder> 0. - Die Ergebnisse hängen von den ICU-Daten der Laufzeitumgebung ab und können zwischen Browsern, Node-Versionen und Betriebssystemen leicht abweichen. Node.js-Builds mit
small-icu(vor Node 13) unterstützen teils nur Englisch. - Ein ungültiger Sprachcode (z. B.
\"de_DE\"mit Unterstrich) löst einenRangeErroraus. Eine unbekannte, aber syntaktisch gültige Locale fällt stillschweigend auf die Standard-Locale zurück. Prüfen Sie das mitresolvedOptions().locale. - Stellen die Locale-Erweiterung (
-u-kn-true) undoptionsdasselbe ein, haben die Werte inoptionsVorrang. - Ein Collator ist nicht dafür gedacht, Zeichenketten auf exakte Gleichheit zu prüfen (z. B. für Schlüssel oder Passwörter). Dafür ist
===richtig, eventuell nachnormalize(). - Kompatibilität: Der Konstruktor wird in allen modernen Browsern und in Node.js unterstützt. Die Option
collationundIntl.Localeals Argument gibt es erst in neueren Versionen (etwa ab 2020).