Start · Sprachen · JavaScript · Referenz · new Intl.Collator()

new Intl.Collator()

Methode

Erzeugt ein <code>Intl.Collator</code>-Objekt, das Zeichenketten nach den Regeln einer Sprache vergleicht, z. B. für korrektes Sortieren.

seit JavaScript ES5.1 (ECMA-402, 1. Ausgabe) · Baseline: alle Brow Kategorie: method-property

Signatur

new Intl.Collator(locales, options)

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:
  • usage: "sort" (Standard) oder "search" (für Gleichheitsprüfungen beim Suchen).
  • sensitivity: "base" (a = á = A), "accent" (a ≠ á, a = A), "case" (a ≠ A, a = á) oder "variant" (alles verschieden; Standard bei usage: "sort").
  • ignorePunctuation: boolean, Satzzeichen ignorieren (Standard false, bei Thai true).
  • numeric: boolean, Ziffernfolgen als Zahlen vergleichen („2“ < „10“).
  • caseFirst: "upper", "lower" oder "false" (Standard der Locale).
  • collation: Sortiervariante, z. B. "phonebk", "pinyin", "emoji".
  • localeMatcher: "best fit" (Standard) oder "lookup".

Rückgabewert

Typ
Intl.Collator
Beschreibung
Ein neues 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));
[ 'Banane', 'Zucker', 'apfel', 'Äpfel', 'ähnlich' ] [ 'ähnlich', 'apfel', 'Äpfel', 'Banane', 'Zucker' ]

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));
[ 'bild1.png', 'bild2.png', 'Bild3.png', 'bild10.png' ]

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'));
[ 'Genève' ] 0

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']));
phonebk [ 'Mueller', 'Müller', 'Muster' ] [ 'de', '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.
  • compare ist ein gebundener Getter. arr.sort(collator.compare) funktioniert daher ohne .bind().
  • Die genauen Rückgabewerte von compare sind nicht festgelegt (nicht unbedingt -1/1). Prüfen Sie nur auf < 0, === 0 oder > 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 einen RangeError aus. Eine unbekannte, aber syntaktisch gültige Locale fällt stillschweigend auf die Standard-Locale zurück. Prüfen Sie das mit resolvedOptions().locale.
  • Stellen die Locale-Erweiterung (-u-kn-true) und options dasselbe ein, haben die Werte in options Vorrang.
  • 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 nach normalize().
  • Kompatibilität: Der Konstruktor wird in allen modernen Browsern und in Node.js unterstützt. Die Option collation und Intl.Locale als Argument gibt es erst in neueren Versionen (etwa ab 2020).