Die sort() Methode sortiert die Elemente eines Arrays in-place und gibt das Array zurück. Die Sortierung ist nicht immer stabil. Die Standardsortierreihenfolge folgt den Unicode Codepoints.

Die Zeit- und Speicherkomplexität des Sortierens kann nicht garantiert werden, weil sie implementierungsabhängig sind.

Syntax

arr.sort([compareFunction])

Parameter

compareFunction Optional
Spezifiziert eine Funktion, die die Sortierreihenfolge festlegt. Wird sie weggelassen, wird jedes Element in ein String konvertiert und nach den Werten der Unicode Codepoints geordnet.

Rückgabewert

Das sortierte Array. Zu bemerken ist, dass das Array in-place sortiert wird und keine Kopie angelegt wird.

Beschreibung

Wird compareFunction nicht angegeben, werden alle nicht-undefined Elemente sortiert indem sie zu Strings konvertiert und diese nach der Unicode point order verglichen werden. Zum Beispiel kommt "Apfel" vor "birne". Bei der numerischen Sortierung kommt 9 vor 80, aber da Nummern in Strings konvertiert werden, kommt "80" vor "9" in der Unicode-Reihenfolge. Alle undefined Elemente werden an das Ende eines Arrays sortiert.

Wird compareFunction angegeben, werden alle nicht-undefined Elemente basierend auf den Rückgabewerten der Vergleichsfunktion geordnet (alle undefined Elemente werden ans Ende des Arrays sortiert, wenn compareFunction nicht angegeben ist). Wenn a und b zwei zu vergleichende Elemente sind, dann:

  • Wenn compareFunction(a, b) kleiner als 0, sortiere a auf einen niedrigeren Index als b, d.h. a kommt zuerst.
  • Wenn compareFunction(a, b) den Wert 0 zurückgibt, bleibt die Reihenfolge von a und b in Bezug zueinander unverändert, werden aber im Vergleich zu den restlichen Elementen des Arrays einsortiert. Hinweis: Der ECMAscript Standard garantiert dieses Verhalten nicht. Demzufolge berücksichtigen dies nicht alle Browser (z.B. Mozilla Versionen von 2003 und älter).
  • Wenn compareFunction(a, b) größer als 0, sortiere b auf einen niedrigeren Index als a.
  • compareFunction(a, b) muss immer denselben Wert zurückgeben, wenn dasselbe Paar an Argumenten a und b übergeben wird. Werden inkonsistente Ergebnisse zurückgegeben, ist die Sortierreihenfolge undefiniert.

Die Vergleichsfunktion hat die Form:

function compare(a, b) {
  if (a ist kleiner als b anhand von sortierkriterien) {
    return -1;
  }
  if (a ist größer als b anhand der sortierkriterien) {
    return 1;
  }
  // a muss gleich b sein
  return 0;
}

Um Nummern anstatt Strings zu vergleichen, kann die Vergleichsfunktion einfach b von a subtrahieren. Die folgende Funktion sortiert ein Array aufsteigend (sofern kein Infinity und NaN enthalten):

function compareNumbers(a, b) {
  return a - b;
}

Die sort Methode kann bequem mit function expressions (und closures) benutzt werden:

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
  return a - b;
});
console.log(numbers);

// [1, 2, 3, 4, 5]

Objekte können anhand der Werte eines ihrer Eigenschaften sortiert werden.

var items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 },
  { name: 'The', value: -12 },
  { name: 'Magnetic' },
  { name: 'Zeros', value: 37 }
];

// Sortierung nach Wert
items.sort(function (a, b) {
  if (a.value > b.value) {
    return 1;
  }
  if (a.value < b.value) {
    return -1;
  }
  // a muss gleich b sein
  return 0;
});

// Sortierung nach Name
items.sort(function(a, b) {
  var nameA = a.name.toUpperCase(); // ignore upper and lowercase
  var nameB = b.name.toUpperCase(); // ignore upper and lowercase
  if (nameA < nameB) {
    return -1;
  }
  if (nameA > nameB) {
    return 1;
  }

  // namen müssen gleich sein
  return 0;
});

Beispiele

Erstellen, Anzeigen und Sortieren eines Arrays

Das folgende Beispiel erstellt vier Arrays and zeigt das Original-Array an; danach die sortieren Arrays. Die numerischen Arrays werden erst ohne, dann mit Vergleichsfunktion sortiert.

var stringArray = ['Blue', 'Humpback', 'Beluga'];
var numericStringArray = ['80', '9', '700'];
var numberArray = [40, 1, 5, 200];
var mixedNumericArray = ['80', '9', '700', 40, 1, 5, 200];

function compareNumbers(a, b) {
  return a - b;
}

console.log('stringArray:', stringArray.join());
console.log('Sorted:', stringArray.sort());

console.log('numberArray:', numberArray.join());
console.log('Sorted without a compare function:', numberArray.sort());
console.log('Sorted with compareNumbers:', numberArray.sort(compareNumbers));

console.log('numericStringArray:', numericStringArray.join());
console.log('Sorted without a compare function:', numericStringArray.sort());
console.log('Sorted with compareNumbers:', numericStringArray.sort(compareNumbers));

console.log('mixedNumericArray:', mixedNumericArray.join());
console.log('Sorted without a compare function:', mixedNumericArray.sort());
console.log('Sorted with compareNumbers:', mixedNumericArray.sort(compareNumbers));

Dieses Beispiel erzeugt die folgende Ausgabe. Wie die Ausgabe zeigt werden Zahlen korrekt sortiert, wenn eine Vergleichsfunktion verwendet wird. Dies gilt für Zahlen als auch für numerische Zeichenketten.

stringArray: Blue,Humpback,Beluga
Sortiert: Beluga,Blue,Humpback

numberArray: 40,1,5,200
Sortiert ohne Vergleichsfunktion: 1,200,40,5
Sortiert mit compareNumbers: 1,5,40,200

numericStringArray: 80,9,700
Sortiert ohne Vergleichsfunktion: 700,80,9
Sortiert mit compareNumbers : 9,80,700

mixedNumericArray: 80,9,700,40,1,5,200
Sortiert ohne Vergleichsfunktion: 1,200,40,5,700,80,9
Sortiert mit compareNumbers : 1,5,9,40,80,200,700

Sortierung von nicht-ASCII Zeichen

Um Strings mit nicht-ASCII Zeichen zu sortieren, d.h. Strings, die akzentierte Buchstaben (e, é, è, a, ä, etc.), und andere Buchstaben außerhalb des Englischen Alphabets enthalten: Verwendung von String.localeCompare. Diese Funktion kann auch solche Zeichen in der richtigen Reihenfolge sortieren.

var items = ['réservé', 'premier', 'cliché', 'communiqué', 'café', 'adieu'];
items.sort(function (a, b) {
  return a.localeCompare(b);
});

// items is ['adieu', 'café', 'cliché', 'communiqué', 'premier', 'réservé']

Sortierung mit map

Die compareFunction (Vergleichsfunktion) kann mehrfach pro Element innerhalb des Arrays aufgerufen werden. Abhängig von der Beschaffenheit der compareFunction, kann dies eine große Belastung (Overhead) hervorrufen. Je mehr Arbeit eine compareFunction verrichtet und je mehr Elemente zu sortieren sind, desto angebrachter kann es sein, eine map Funktion zur Sortierung heranzuziehen. Die Idee dahinter ist, das Array einmal zu durchlaufen um die für die Sortierung zu verwendenden Aktualwerte zu ermitteln und in ein temporäres Array zu übernehmen, dieses zu sortieren und anschließend das temporäre Array zu durchlaufen um die richtige Reihenfolge herzustellen.

// the array to be sorted
var list = ['Delta', 'alpha', 'CHARLIE', 'bravo'];

// temporary array holds objects with position and sort-value
var mapped = list.map(function(el, i) {
  return { index: i, value: el.toLowerCase() };
})

// sorting the mapped array containing the reduced values
mapped.sort(function(a, b) {
  return +(a.value > b.value) || +(a.value === b.value) - 1;
});

// container for the resulting order
var result = mapped.map(function(el){
  return list[el.index];
});

Spezifikationen

Spezifikation Status Kommentar
ECMAScript 1st Edition (ECMA-262) Standard Initiale Definition.
ECMAScript 5.1 (ECMA-262)
Die Definition von 'Array.prototype.sort' in dieser Spezifikation.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
Die Definition von 'Array.prototype.sort' in dieser Spezifikation.
Standard  
ECMAScript Latest Draft (ECMA-262)
Die Definition von 'Array.prototype.sort' in dieser Spezifikation.
Entwurf  

Browserkompatibilität

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid WebviewChrome für AndroidEdge MobileFirefox für AndroidOpera für AndroidiOS SafariSamsung InternetNode.js
Grundlegende UnterstützungChrome Vollständige Unterstützung 1Edge Vollständige Unterstützung JaFirefox Vollständige Unterstützung 1IE Vollständige Unterstützung 5.5Opera Vollständige Unterstützung JaSafari Vollständige Unterstützung JaWebView Android Vollständige Unterstützung JaChrome Android Vollständige Unterstützung JaEdge Mobile Vollständige Unterstützung JaFirefox Android Vollständige Unterstützung 4Opera Android Vollständige Unterstützung JaSafari iOS Vollständige Unterstützung JaSamsung Internet Android Vollständige Unterstützung Janodejs Vollständige Unterstützung Ja

Legende

Vollständige Unterstützung  
Vollständige Unterstützung

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

Schlagwörter: 
Mitwirkende an dieser Seite: schlagi123, xerox, Huargh
Zuletzt aktualisiert von: schlagi123,