JavaScript sort() metodu ile Sıralamalarda Türkçe Karakter Sorunu
Merhabalar, özel karakterler programlama dillerinde ve veri tabanlarında her daim sorun çıkartmışlardır. Özellikle sıralamalarda sort fonksiyonlarını çalıştırırken ş ğ ü ı ç harfleri sıralamanın en altlarında yer almakta olup; inanılmaz can sıkarlar. Örnek olarak ç harfi u harfinden sonra görüntülenir halbuki c harfinden sonra gelmesi gerekir.
Bilmelisiniz ki JavaScript sort() metodu ile değerleri sıralarken onları string olarak kabul eder ve Unicode sırasına göre azalan sırada sıralar varsayılan olarak. Yani numara dahi yazsanı onu bir string olarak görür. Nümerik ifade bile koyarsanız yani 36 102 şeklinde burada sıralama tamamen string şeklinde gerçekleşir. ve 36 > 102 şeklinde sıralanır. Çünkü 3 stringi 1 stringinden büyüktür.
Bu string karmaşasının içinden çıkabilmek adına; çok basit bir fonksiyon yazabiliriz.
function compareNumbers(a, b) {
return a - b;
}
var item = [1, 11, 13, 22, 12, 2];
item.sort(compareNumbers);
Şeklinde bir fonksiyon oluşturup sort() metoduna parametre olarak verdiğimizde ise; alacağımız sonuç gayet normal seviyelere inmekte. Ancak hala yetersiz olmakta burada da localeCompare metodu gerekmekte.
item.sort(function (a, b) {
return a.localeCompare(b);
});
şeklinde yazdığımızda ise tamamen rahatlığa kavuşmaktayız. He bazen bunlar çalışmıyorsa işin daha da cinliğine kaçıp karakterleri arkaplanda sıralama işleminden önce karakterleri replace edebilir sonrasında sort metoduna ekleyebiliriz
var special_letters = {
"C": "Ca", "c": "ca", "Ç": "Cb", "ç": "cb",
"G": "Ga", "g": "ga", "Ğ": "Gb", "ğ": "gb",
"I": "Ia", "ı": "ia", "İ": "Ib", "i": "ib",
"O": "Oa", "o": "oa", "Ö": "Ob", "ö": "ob",
"S": "Sa", "s": "sa", "Ş": "Sb", "ş": "sb",
"U": "Ua", "u": "ua", "Ü": "Ub", "ü": "ub"
};
İşi bileceeğğn işe gitmeyeceğn misali.