Javascript - Sort Metodu Kullanılarak Azalan Yönde Sıralama (Reverse Order Sorting)

Javascript'te sort() metodu, dizilerde sıralama işlemi yapılmasını sağlar. Dizi elemanlarını varsayılan olarak artan yönde (ascending order) sıralar. 

sort() metodu, dizi elemanlarını string olarak algılar ve Unicode (decimal) değerlerine göre karşılaştırır. Unicode değerleri dönüştürme işlemi için yararlandığım site için tıklayınız. Bu yüzden sayıların olduğu bir dizide doğru sıralamayı elde edemeyiz. Bunu bir örnekle açıklayalım.

sayilar adında sadece sayıların olduğu bir dizi tanımladık ve sort metodu ile elemanları sıralamak istedik. Aşağıdaki kodlamada beklenen ve gerçek sonuçlar yer almaktadır.

 var sayilar = [1, 30, 4, 21, 100000];  
 sayilar.sort();  
 console.log(sayilar);  
 // Beklenen sonuç: Array [1, 4, 21, 30, 100000]  
 // Gerçek sonuç: Array [1, 100000, 21, 30, 4]  

Farklı sonuç ile karşılaşmamızın sebebi; matematiksel olarak 100000 sayısı 21'den büyük olmasına rağmen Unicode değerlerine göre 21 değeri 100000'den büyüktür. Unicode mantığında önce 1 ve 2 karşılaştırılır. Unicode değer bakımından 1, 2 den büyük olduğu için 100000 değeri 21 den önce sıralanmıştır.

1 için Unicode değeri: 49

2 için Unicode değeri: 50

String metin içeren karşılaştırmalarda ise büyük küçük harf duyarlılığı vardır. Alfabetik olarak sıralama yapar.  

 const buyukKucukHarf = ['mm', 'mM', 'Mm', 'MM'];  
 buyukKucukHarf.sort();  
 console.log(buyukKucukHarf);  
 // Gerçek sonuç: Array ["MM","Mm","mM","mm"]  

m için Unicode değeri: 109

M için Unicode değeri: 77

77<109 durumundan dolayı ; m, M'den sonra sıralanmaktadır.

Özellikle sayısal verilerde doğru bir şekilde sıralama yapmak veya azalan yönde sıralama yapabilmek için karşılaştırma fonksiyonu kullanmamız gerekir. 

Sayısal Verileri Artan Yönde Sıralama

 var sayilar = [1, 30, 4,4,234,23, 100000];  
 function artanYondeSıralama(a, b) {  
  return a - b;  
 }  
 sayilar.sort(artanYondeSıralama);  
 console.log(sayilar);  
 // Gerçek sonuç: Array [1,4,4,23,30,234,100000]  

Kullanılan fonksiyonun temel mantığı iki değer arasındaki fark pozitif bir değer ise {b, a} sıralaması olacaktır. 

Örneğin;

a=30, b=4 ise fark 26 olduğundan b değeri a değerinden önce sıralanacaktır. Sonuç {4,30} olacaktır.

Negatif bir değer ise sıralama değişmeyecektir. 

a=1, b=4 ise fark -3 olduğundan a değeri b değerinden önce sıralanacaktır. Sonuç {1,4} olacaktır.

Fark 0 ise yan yana sıralanacaktır.

Sayısal Verileri Azalan Yönde Sıralama

 var sayilar = [1, 30, 4,4,234,23, 100000];  
 function azalanYondeSıralama(a, b) {  
  return b - a;  
 }   
 sayilar.sort(azalanYondeSıralama);  
 console.log(sayilar);  
 // Gerçek sonuç: Array [100000,234,30,23,4,4,1]  

Kullanılan fonksiyonun temel mantığı iki değer arasındaki fark negatif bir değer ise {a, b} sıralaması olacaktır. 

Örneğin;

a=30, b=4 ise fark -26 olduğundan a değeri b değerinden önce sıralanacaktır. Sonuç {30,4} olacaktır.

Pozitif bir değer ise sıralama değişmeyecektir. 

a=1, b=4 ise fark +3 olduğundan b değeri a değerinden önce sıralanacaktır. Sonuç {4,1} olacaktır.

Fark 0 ise yan yana sıralanacaktır. 

Objeler için sıralama, sıralanacak property adı kullanılarak yapılabilir.

Örnek olarak personeller adında isim ve yas propertylerini içeren bir objemiz var. Yaşa göre azalan bir sıralama yapmak istediğimizde aşağıdaki gibi bir görüntü elde ederiz.

 var personeller = [  
  { isim: 'Mert', yas: 21 },  
  { isim: 'Ali', yas: 37 },  
  { isim: 'Ahmet', yas: 45 }  
 ];  
 function azalanYondeYasSıralama(a, b) {  
  return b.yas - a.yas;  
 }   
 personeller.sort(azalanYondeYasSıralama);  
 console.log(personeller);  
 /* Gerçek sonuç:   
 Array [  
 {isim:"Ahmet",yas:45},  
 {isim:"Ali",yas:37},  
 {isim:"Mert",yas:21}  
 ]  
 */  

Buradaki kullanım a ve b parametrelerinde yas propertysinin çağrılmasıdır. Fonksiyonumuz yaş üzerinden azalan yönde sıralama yapmıştır. 

İsme göre azalan yönde alfabetik sıralayabilmek için de aynı mantıkta isim propertysi kullanılmaktadır.

 var personeller = [  
  { isim: 'Mert', yas: 21 },  
  { isim: 'Ali', yas: 37 },  
  { isim: 'Ahmet', yas: 45 }  
 ];  
 function azalanYondeIsimSıralama(a, b) {  
  return b.isim - a.isim;  
 }   
 personeller.sort(azalanYondeIsimSıralama);  
 console.log(personeller);  
 /* Gerçek sonuç:   
 Array [  
 {isim:"Mert",yas:21},  
 {isim:"Ali",yas:37},  
 {isim:"Ahmet",yas:45}  
 ]  
 */  

Temel olarak sort metodunun derinlerine indik ve javascript ile nasıl azalan yönde sıralamanın yapıldığını açıkladık.


Yorumlar