Ana içeriğe geç
Modül 6 · Ders 4 ders 4Kurstaki 24/32~12 min
Modül dersleri (4/4)

sıralama

JavaScript'te bir diziyi sıralamanın büyük bir tuzağı vardır: sort() orijinal diziyi değiştirir ve varsayılan olarak dizeler halinde sıralanır.

Tuzak

JS
const nums = [10, 2, 1, 20];
nums.sort();
// [1, 10, 2, 20]   ← !? sorted as strings: "1" < "10" < "2"

Sayısal sıralama için bir karşılaştırıcı (a, b) => number iletmeniz gerekir:

  • a - b < 0 → a önce gelir
  • a - b > 0 → b önce gelir
  • a - b === 0 → sıra değişmedi
JS
const nums = [10, 2, 1, 20];
nums.sort((a, b) => a - b);
// [1, 2, 10, 20]    ← ascending order

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

Nesneleri alana göre sıralama

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}]

Dizeleri localeCompare ile karşılaştırabilirsiniz:

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

Orijinali mutasyona uğratmamak

İki seçenek:

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

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

Deneyin

Egzersiz#js.m6.l4.e1
Denemeler: 0Yükleniyor…

'sortAscending(nums)'ı tanımlayın: dizinin YENİ bir kopyasını sayı olarak artan düzende sıralayın. Orijinal değişmemelidir.

Düzenleyici yükleniyor…
İpucu göster

[...sayılar].sort((a, b) => a - b)

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#js.m6.l4.e2
Denemeler: 0Yükleniyor…

`sortByAgeAscending(people)`ı tanımlayın: { name, age } dizisi verildiğinde, yaşa göre artan şekilde sıralanmış yeni bir kopya döndürür. Orijinal değişmemelidir.

Düzenleyici yükleniyor…
İpucu göster

[...kişiler].sort((a, b) => a.yaş - b.yaş)

3 denemeden sonra çözüm mevcut