Skip to content

Instantly share code, notes, and snippets.

@ugurozpinar
Created March 21, 2014 09:36
Show Gist options
  • Save ugurozpinar/9682734 to your computer and use it in GitHub Desktop.
Save ugurozpinar/9682734 to your computer and use it in GitHub Desktop.
Javascript object array Turkish sorting. Türkçe Sıralama
var arr = [{id:3,title:"Ali"},{id:3,title:"Veli"},{id:3,title:"Vehbi"}];
arr.sort(turkcesiralama);
function turkcesiralama(a, b){
var atitle = a.title;
var btitle = b.title;
var alfabe = "AaBbCcÇçDdEeFfGgĞğHhIıİiJjKkLlMmNnOoÖöPpQqRrSsŞşTtUuÜüVvWwXxYyZz0123456789";
if (atitle.length === 0 || btitle.length === 0) {
return atitle.length - btitle.length;
}
for(var i=0;i<atitle.length && i<btitle.length;i++){
var ai = alfabe.indexOf(atitle[i]);
var bi = alfabe.indexOf(btitle[i]);
if (ai !== bi) {
return ai - bi;
}
}
}
@haydar-can
Copy link

haydar-can commented Apr 8, 2021

var obj = [{'placeName':'Şırnak'},{'placeName':'ŞanlıUrfa'},{'placeName':'Çorum'},{'placeName':'Çanakkale'}, {'placeName':'Antep'},{'placeName':'Ğığılca'},{'placeName':'Hatay'},{'placeName':'Trabzon'},{'placeName':'Isparta'},{'placeName':'İstanbul'},{'placeName':'Ödemiş'},{'placeName':'Çankırı'}, {'placeName':'Ceyhan'},{'placeName':'Ceylanpınar'},{'placeName':'Gaziantep'},{'placeName':'Ordu'},   {'placeName':'Sarıyer'},{'placeName':'Üsküdar'},{'placeName':'şırnak'},{'placeName':'üsküdar'}
]
/**
!	@alphabet: Sıralama kalıbı
  @dir : sıralama yönü 0 veya -1 alır. 0 [ASC], 1 [DESC]
  @caseSensitive: Büyük küçük harf duyarlılığı
*/

var alpha = function(alphabet, dir, caseSensitive){
  return function(a, b){
    var pos = 0, min = Math.min(a.length, b.length);
    dir = dir || 1;
    caseSensitive = caseSensitive || false;
    if(!caseSensitive){
      a = a.toLowerCase();
      b = b.toLowerCase();
    }
    while(a.charAt(pos) === b.charAt(pos) && pos < min){ pos++; }
    return alphabet.indexOf(a.charAt(pos)) > alphabet.indexOf(b.charAt(pos)) ? dir : -dir;
  };
};

// Yerleşim JS komutu ile sıralama. 
var c = obj.sort((a,b)=>{
	let _a = a.placeName.toLocaleLowerCase('tr');
	let _b = b.placeName.toLocaleLowerCase('tr');

	return _a.localeCompare(_b, 'tr', {sensitivity: 'base'});
})

jQuery('#app').html(JSON.stringify(c));

// alpha fonksiyonu ile sıralama. 
var d = obj.sort((a,b)=>{
	return alpha('0123456789AaBbCcÇçDdEeFfGgĞğHhIıİiJjKkLlMmNnOoÖöPpQqRrSsŞşTtUuÜüVvWwXxYyZz',-1, true)
	(a.placeName,b.placeName);
});
jQuery('#app1').html(JSON.stringify(d));

Örnek :
https://jsfiddle.net/t3huqn2r/

@emresert
Copy link

Thank you for solution. That was useful for me.

@eboyraz
Copy link

eboyraz commented Mar 15, 2023

turkishTextCompare(firstString: string, secondString: string, isDesc = false) {
    const alphabet = 'AaBbCcÇçDdEeFfGgĞğHhIıİiJjKkLlMmNnOoÖöPpQqRrSsŞşTtUuÜüVvWwXxYyZz0123456789';
    const minStringLen = firstString.length > secondString.length ? firstString.length : secondString.length;

    for (let i = 0; i < minStringLen; i++) {
        const fCharPos= alphabet.indexOf(firstString[i]);
        const sCharPos= alphabet.indexOf(secondString[i]);

        if (fCharPos!== sCharPos) {
            return (fCharPos> sCharPos? 1 : -1) * (isDesc ? -1 : 1);
        }
    }

    return 0;
}

@eboyraz
Copy link

eboyraz commented Mar 15, 2023

usage:
const stringList = ["A", "Ç", "C", "Ş", "S"];
stringList.sort((x, y) => turkishTextCompare(x, y));

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment