JavaScript’te “sort()” Metodu Kullanımı

JavaScript’te “sort()” metodu, dizi (array) içindeki elemanları sıralamak için kullanılan yerleşik bir fonksiyondur.

JavaScript’te “sort()” Metodu

Kelime anlamı olarak “sıralamak” anlamına gelen “sort()” metodu, dizi elemanlarını belirli bir kritere göre “yerinde sıralamak” için kullanılır.

“Yerinde sıralama” demek, sıralama işleminin mevcut dizi üzerinde gerçekleştirildiği ve yeni bir dizi oluşturulmadığı anlamına gelir. Yani bu da demektir ki, “sort()” metodu orijinal diziyi değiştirir ve sıralanmış bir şekilde bu diziyi döndürür.

“Peki, bunu nasıl yapar?” Metodumuz, dizi elemanlarını “string” olarak ele alır ve bunları Unicode noktasına göre alfabatik bir şekilde sıralar. Aşağıdaki örneği inceleyiniz:

Ancak belirtmek isterim ki örneğimizdeki harfler, her bir harfin karşılık geldiği “Unicode” kod noktalarına göre sıralanmıştır. Alfabetik sıralama olayı bizim alfabemiz için geçerli olmayacaktır. Bakınız:

Normal şartlarda Türkçe harf sıralamasına göre önde sıralanması gereken harflerin bu sıralamaya uymadığına dikkat edin. Bunun nedeni, “sort()” metodunun, diziyi “Unicode” kod noktalarına göre sıralamasıdır. Bu sıralama, Türkçe alfabesinin alışık olduğumuz sıralamasından farklıdır.

Özellikle “ç”, “ğ”, “ö”, “ş”, ve “ü” gibi Türkçe özel harfler, İngilizce harflerinden sonra gelen “Unicode” kod noktalarına sahiptir. Bu yüzden bu harfler, alfabemize göre beklenenden daha sonraki pozisyonlarda sıralanmıştır. Aşağıdaki tabloyu incediğinizde bu durumun daha da anlaşılır olacağını düşünüyorum:

HarfUnicode Kod Noktası
AU+0041
BU+0042
CU+0043
DU+0044
EU+0045
FU+0046
GU+0047
HU+0048
IU+0049
İU+0130
JU+004A
KU+004B
LU+004C
MU+004D
NU+004E
OU+004F
ÖU+00D6
PU+0050
QU+0051
RU+0052
SU+0053
ŞU+015E
TU+0054
UU+0055
ÜU+00DC
VU+0056
WU+0057
XU+0058
YU+0059
ZU+005A
ÇU+00C7
ĞU+011E
JavaScript’te sort() Metodu

Yukarıdaki tablomuz, harflerin “Unicode” kod noktalarına göre sıralanmasını göstermektedir. Harf sıralaması Türk alfabesine göre değil, “Unicode” kod noktalarına göre sıralıdır. Bu yüzden bazı Türkçe harfler, alfabemize göre beklenenden daha sonraki pozisyonlarda yer almaktadır.

Benzer şekilde kelimeleri de alfabetik olarak sıralayabiliriz. Aşağıdaki örneğimizde, kelimeleri oluşturan harflere göre harf harf sıralanmıştır.

Bu örnekte, kelimeler alfabetik olarak sıralanmıştır. Sıralama, kelimelerin ilk harflerine göre yapılmıştır. Eğer ilk harfler aynıysa, sonraki harflere bakılır. Kelime uzunluğunun sıralamada bir etkisi yoktur. Örneğin, “elbise” kelimesi “elma” kelimesinden önce gelmektedir çünkü “elbise” kelimesindeki üçüncü harf olan “b” “elma” kelimesindeki üçüncü harf olan “m”den önce gelir. Bu nedenle “elbise” kelimesi sıralamada “elma” kelimesinden önce yer alır.

“Peki, sort() metodu sayıları nasıl sıralar?” Aslında sort() metodu, dizi elemanları sayısal bir değere sahip olsa bile matematiksel olarak değil de “string” olarak değerlendirilir ve sırlamayı “Unicode” noktalarına göre yapar. Bu nedenle ek işlem yapmamız gerekmektedir.

Bu örnekte, sayıların beklenen doğal sıralamasının dışında bir sıralama ile listelendiğini görebilirsiniz. Bunun nedeni, sort() metodunun sayıları “string” olarak değerlendirmesi ve Unicode kod noktalarına göre sıralamasıdır.

“Öyleyse sayısal değerlere sahip bir diziyi nasıl matematiksel olarak sıralayabiliriz?” Bu sorunu karşılaştırma fonksiyonu kullanarak aşabiliriz. Tipik bir karşılaştırma fonksiyonu aşağıdaki gibi yazılmaktadır:

function(a, b) { return a - b; }

Yukarıdaki örneğimizi karşılaştırma fonksiyonu kullanarak sıraladığımızda sorun çözülecektir. Bakınız:

Karşılaştırma fonksiyonunu arrow fonksiyonu ile kısaca yazabiliriz:

Yukarıdaki örnekte, karşılaştırma fonksiyonu a-b işlemini döndürür. Bu işleme göre aşağıdaki kurala göre bir sıralama olur:

  • Eğer a - b negatif bir sayı döndürürse, a, b‘den önce yer alır.
  • Eğer a - b pozitif bir sayı döndürürse, b, a‘dan önce yer alır.
  • Eğer a - b sıfır döndürürse, a ve b‘nin sıralaması değişmez.

Bu kod parçası, sayıları küçükten büyüğe sıralar. Eğer büyükten küçüğe sıralamak isterseniz, karşılaştırma fonksiyonunu b - a olarak değiştirmeniz gerekir.

“sort()” Metodunun Avantajları ve Dezavantajları

JavaScript’te “sort()” metodunun çeşitli avantajları (➕) olduğu gibi bazı dezavantajları (➖) da bulunmaktadır. Bunlardan bazıları aşağıda derlenmiştir.

  • ➕ Avantajları:
    • Esneklik: sort() metodu, kullanıcı tarafından tanımlanan özel bir karşılaştırma fonksiyonu alabilir.
    • Yerinde Sıralama: Dizi üzerinde “yerinde” sıralama yapar, bu da ekstra bellek kullanımı olmadan dizi elemanlarının sıralanmasını sağlar.
    • Kullanım Kolaylığı: Basit sıralama ihtiyaçları için oldukça kolay bir kullanıma sahiptir. Özel bir sıralama fonksiyonu yazmadan diziyi sıralayabilirsiniz.
  • ➖ Dezavantajları:
    • Performans Sorunları: Büyük veri setleri üzerinde, özellikle özelleştirilmiş sıralama fonksiyonlarıyla, performans sorunları yaşanabilir. Zira çok sayıda geçici değişken oluşturması büyük dizilerle çalışırken bellek kullanımını arttıracaktır.
    • Varsayılan Sıralama Karışıklığı: sort() varsayılan olarak dizi elemanlarını “string” olarak sıralar, bu da sayısal sıralamalarda beklenmeyen sonuçlara neden olabilir. Bu durumları düzeltmek için bir karşılaştırma fonksiyonu kullanmak zorundayız.

Eleman Olarak “Nesne” Barındıran Dizilerde Sıralama

JavaScript’te sort() metodu ile dizi öğelerini küçükten büyüğe veya büyükten küçüğe sıralayabiliriz. Ancak, bu sıralamayı belirlemek tamamen sağladığınız karşılaştırma fonksiyonuna bağlıdır. Bu sayede, sıralama işlemi çok özelleştirilebilir hale gelir.

Örneğin içinde, eleman olarak nesne barındıran aşağıdaki gibi bir dizimiz olduğunu düşünelim:

Bu diziyi, kişilerin yaşlarına göre küçükten büyüğe sıralamak için sort() metoduna bir karşılaştırma fonksiyonu yazabiliriz:

Yukarıdaki kodumuz, people dizisini kişilerin yaşlarına göre küçükten büyüğe sıralar. Eğer alfabetik sıraya göre isimlerini sıralamak isterseniz, aşağıdaki gibi bir karşılaştırma fonksiyonu yazmalısınız:

Bu fonksiyonun dönüş değerleri olan 1, -1 ve 0 olmasının anlamları şunlardır:

  • -1: Fonksiyon, -1 değerini döndürdüğünde, a nesnesinin sıralama sırasında b nesnesinden önce gelmesi gerektiğini belirtir. Bu örnekte, eğer a nesnesinin name özelliği b nesnesinin name özelliğinden alfabetik olarak daha önceyse, -1 döndürülür.
  • 1: Fonksiyon, 1 değerini döndürdüğünde, a nesnesinin sıralama sırasında b nesnesinden sonra gelmesi gerektiğini belirtir. Bu örnekte, eğer a nesnesinin name özelliği b nesnesinin name özelliğinden alfabetik olarak daha sonraysa, 1 döndürülür.
  • 0: Fonksiyon, 0 değerini döndürdüğünde, a ve b nesnelerinin sıralama sırasında eşit olduğunu belirtir. Yani, bu iki nesnenin sıralama sırası değiştirilmez. Bu örnekte, eğer a nesnesinin name özelliği b nesnesinin name özelliğiyle aynıysa, 0 döndürülür.

Yukarıdaki örnekler, sort() metodunun ne kadar esnek olduğunu ve sıralama işleminin nasıl özelleştirilebileceğini gösterir. İhtiyaçlarınıza bağlı olarak, neredeyse her türlü özelleştirmeyi sağlayabilecek bir karşılaştırma fonksiyonu yazabilirsiniz.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu