Direkt zum Hauptinhalt springen
eLearner.app
Modul 6 · Lektion 4 von 424/32 im Kurs~12 min
Lektionen des Moduls (4/4)

sort

Das Sortieren eines Arrays in JavaScript birgt eine große Falle: sort() verändert das ursprüngliche Array und sortiert standardmäßig als Strings.

Die Falle

JS
const nums = [10, 2, 1, 20];
nums.sort();
// [1, 10, 2, 20]   ← !? ordinati come stringhe: "1" < "10" < "2"

Für eine numerische Sortierung musst du eine Vergleichsfunktion (a, b) => number übergeben:

  • a - b < 0 → a wird vorangestellt
  • a - b > 0 → b wird vorangestellt
  • a - b === 0 → Reihenfolge bleibt unverändert
JS
const nums = [10, 2, 1, 20];
nums.sort((a, b) => a - b);
// [1, 2, 10, 20]    ← ordine crescente

nums.sort((a, b) => b - a);
// [20, 10, 2, 1]    ← decrescente

Objekte nach einem Feld sortieren

JS
const utenti = [
  { nome: 'Anna', eta: 30 },
  { nome: 'Luca', eta: 12 },
  { nome: 'Sara', eta: 18 },
];

utenti.sort((a, b) => a.eta - b.eta);
// [{Luca,12}, {Sara,18}, {Anna,30}]

Strings können mit localeCompare verglichen werden:

JS
const nomi = ['Bruno', 'aurora', 'Carlo'];
nomi.sort((a, b) => a.localeCompare(b));
// ['aurora', 'Bruno', 'Carlo']

Das Original nicht verändern

Zwei Optionen:

JS
// 1) copia + sort
const copia = [...nums].sort((a, b) => a - b);

// 2) toSorted (moderno, ES2023)
const ordinati = nums.toSorted((a, b) => a - b);

Probier es aus

Übung#js.m6.l4.e1
Versuche: 0Wird geladen…

Definiere `sortAscending(nums)`: Gibt eine NEUE Kopie des Arrays zurück, die numerisch aufsteigend sortiert ist. Das Original-Array darf nicht verändert werden.

Editor wird geladen…
Hinweis anzeigen

[...nums].sort((a, b) => a - b)

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#js.m6.l4.e2
Versuche: 0Wird geladen…

Definiere `sortByAgeAscending(people)`: Berechne für ein gegebenes Array von Objekten { name, age } eine neue Kopie, die nach aufsteigendem Alter (age) sortiert ist. Das Original-Array darf nicht verändert werden.

Editor wird geladen…
Hinweis anzeigen

[...people].sort((a, b) => a.age - b.age)

Lösung nach 3 Versuchen verfügbar