sort() Metodu İle Sıralama Yap - Javascript


Javascript üzerindeki sort() metodunun çalışma mantığını bir senaryo üzerinden analiz eden ve sort() metodu ile sayı sıralamasının nasıl yapılabileceği ile ilgili bir alternatif gösteren koddur.

Senaryo

Kelime Sıralama

Aşağıdaki kod kelimeleri sıralamaya yarayan bir javascript kodu alternatifidir.


var kelimeDizi = 
    new Array("Cemil", "Eda", "Yeşim", "Ferdi", "Zuhal", "Hasan");

kelimeDizi.sort();

Kodu çalıştırdığımız zaman bize aşağıdaki sonucu döndürdü.


Array(6) [ "Cemil", "Eda", "Ferdi", "Hasan", "Yeşim", "Zuhal" ]


Sayı Sıralama

Sayıları sıralamak için sort() metodunu kullanalım ve sonucu görelim.


var sayiDizi = 
    new Array(10, 8, 25, 13, 84, 36);

sayiDizi.sort();

Kodu çalıştırdığımız zaman bize aşağıdaki sonucu döndürdü.


Array(6) [ 10, 13, 25, 36, 8, 84 ]


Durum

Kelime sıralama işlemi düzgün bir şekilde çalışırken sayılar istediğimiz gibi sıralanmadı. Sayıların sıralanmasında hem doğru hem de yanlış bir şeyler var.

Sayılar doğru sıralanmış, çünkü dizilime baktığımızda tıpkı kelimelerde olduğu gibi alfabetik bir sıralama var.

Sayılar yanlış sıralanmış, çünkü ben alfabetik bir dizilim istemiyorum. Matematiksel değerlerine göre sıralama yapılsın istiyorum.

Çözüm

Durumun Analizi

Bu duruma sebep olan şey Javascript'in çalışma yapısından kaynaklanıyor. Javascript’te temel sıralama alfabetik olarak yapılıyor. Bu sayı da olsa durum farketmiyor. Bu yüzden de sayılar alfabetik olarak sıralandı. Durumu daha iyi anlamak için bir kelimelerin de olduğu bir örneğe bakalım.

Öncelik Sonralık İlişkisine Göre Sıralanmış Bir Kelime Listesi


Ali
C
Er
Erdal
Remzi
Veli

Sayıların Öncelik Sonralık İlişkisine Göre Diziliminin Mantığı


Ali-----10   
C-------13
Er------25
Erdal---36
Remzi---8
Veli----84

Sayılarda ilk sıralar doğru sıralanmış gibi görünse de aslında alfabetik mantığa uyduğu için öyleymiş gibi görünüyor. Örneğin 10 ile 13 karşılaştıralım. İlk sayılar aynı olduğundan dolayı bir sıkıntı yok ama ikinci sayılara bakalım: 0 ve 3. Hangisi alfabetik olarak daha önce gelir? (0 = A ve 3 = C gibi)

Bu sebepten dolayı ilk dört sıradaki sayılar denk geldiği için sayı olarak da doğru sıralanmış gibi görünüyor. Ama işin aslı öyle değil.


Sayı Sırala

sort() metodunun nümerik mantıkta çalışabilmesi için sort metoduna ekleme yapmak gerekiyor. Karşılaştırma yapacak ve sort fonksiyonunu buna göre yönlendirebilecek bu fonksiyon.


var sayiDizi = new Array(10, 8, 25, 13, 84, 36);

//Artan sıralama yap.
sayiDizi.sort(function(a,b) { return a - b; });

//Azalan sıralama yap.
sayiDizi.sort(function(a,b) { return b - a; });

Yararlanılan Kaynaklar
Etiketler
javascript