sort()
metodu, bir diziyi alfabetik olarak sıralar:
var meyveler = ["Muz", "Portakal", "Elma", "Mango"];
meyveler.sort(); // meyveler dizisinin elemanlarını alfabetik olarak sıralar
reverse()
metodu, bir diziyi tersine doğru sıralar.
Bu metodu, dizi elemanlarını alfabetik olarak tersine sıralamak istediğinizde kullanabilirsiniz:
var meyveler = ["Muz", "Portakal", "Elma", "Mango"];
meyveler.sort(); // önce alfabetik olarak sırala
meyveler.reverse(); // sonra tersine sırala
Standart olarak, sort()
metodu string değerleri sıralar.
String yani yazılı değerler için çalışır: Mesela Ali alfabetik olarak Veli'den önce gelir.
Ancak, sayısal değerler için bu durum geçerli değildir. Çünkü sort metoduna göre, 40 sayısı 123 sayısından büyüktür, çünkü ilk rakam olan 4, 1'den daha büyüktür.
Bu yüzden, sort()
metodu sayılarla kullanıldığında yanlış sonuçlar verecektir.
Bunu da bir karşılaştırma fonksiyonu yazarak çözebilirsiniz:
var sayilar = [25, 9, 12, 33, 87, 1, 42];
sayilar.sort(function(a, b){return a - b});
Aynı fonksiyonu, sayıları büyükten küçüğe sıralamak için de kullanabilirsiniz:
var sayilar = [25, 9, 12, 33, 87, 1, 42];
sayilar.sort(function(a, b){return b - a});
Bu fonksiyonun amacı, farklı bir şekilde sıralama imkanı belirlemektir.
Karşılaştırma fonksiyonu, verilen değerlere bağlı olarak negatif, 0 ya da pozitif bir değer döndürmelidir.
Eğer fonksiyondan dönen değer negatifse, a değeri b değerinden önce sıralanır.
Eğer fonksiyondan dönen değer pozitifse, b değeri a değerinden önce sıralanır.
Eğer fonksiyondan dönen değer 0 ise, bir değişiklik yapılmaz.
Örneğin, 2 ve 8 değerini ele alalım. sort()
metodu karşılaştırma fonksiyonunu(2, 8) çağırır.
Daha sonra fonksiyon (2 - 8) işlemini hesaplar (a - b), sonuç negatif olduğundan (-6), sort()
metodu 2 değerini 8'den küçük kabul eder ve 2 değerini önce sıralar.
Bu örnek kodda, iki türlü sıralama da bulunmaktadır:
<button onclick="siralamaAlfabetik()">Alfabetik Sırala</button>
<button onclick="siralamaNumara()">Numara Sırala</button><p id="demo"></p>
<script>
var sayilar = [25, 9, 12, 33, 87, 1, 42];
document.getElementById("demo").innerHTML = sayilar;
function siralamaAlfabetik() {
sayilar.sort();
document.getElementById("demo").innerHTML = sayilar;
}
function siralamaNumara() {
sayilar.sort(function(a, b){return a - b});
document.getElementById("demo").innerHTML = sayilar;
}
</script>
var sayilar = [25, 9, 12, 33, 87, 1, 42];
sayilar.sort(function(a, b){return 0.5 - Math.random()});
JavaScript'te en yüksek ve en düşük değeri bulmak için hazır bir fonksiyon bulunmamaktadır.
Fakat diziyi küçükten büyüğe sıraladıktan sonra, index numaralarını kullanarak birinci ve sonuncu değerlere ulaşabilirsiniz.
var sayilar = [25, 9, 12, 33, 87, 1, 42];
sayilar.sort(function(a, b){return a - b});
var enDusuk = sayilar[0];
var enYuksek = sayilar[sayilar.length-1];
Bir dizideki en yüksek değerli elemanı bulmak için, Math.max.apply
metodunu kullanabilirsiniz:
Bir dizideki en düşük değerli elemanı bulmak için, Math.min.apply
metodunu kullanabilirsiniz:
En yüksek veya en düşük değeri bulmak için en hızlı çözüm kendi fonksiyonunuzu yazmaktır.
Bu örnek fonksiyon, bulduğu en yüksek değerle dizideki diğer değerleri karşılaştırıp en yüksek değeri bulmaktadır:
function maxDeger(dizi) {
var uzunluk = dizi.length;
var max = -Infinity;
while (uzunluk--) {
if (dizi[uzunluk] > max) {
max = dizi[uzunluk];
}
}
return max;
}
Bu örnek fonksiyon, bulduğu en düşük değerle dizideki diğer değerleri karşılaştırıp en düşük değeri bulmaktadır:
function minDeger(dizi) {
var uzunluk = dizi.length;
var min = Infinity;
while (uzunluk--) {
if (dizi[uzunluk] < min) {
min = dizi[uzunluk];
}
}
return min;
}
JavaScript dizileri genelde objeleri saklamak için kullanılır:
var arabalar = [
{tur:"araba1", model:5},
{tur:"araba2", model:12},
{tur:"araba3", model:3}
];
Objeler her ne kadar farklı değişken türlerini barındırsa da, yine de diziyi sıralamak için sort()
metodu kullanılabilir.
Çözüm ise, obje oldukları için isimler için karşılaştırma fonksiyonu yazmaktır:
"model" ismindeki değişken sayısal veri tuttuğu için daha kolay fakat "tur" ismindeki değişken string değer tuttuğundan onları sıralamak biraz daha zahmetli olabilir:
arabalar.sort(function(a, b){
var x = a.tur.toLowerCase();
var y = b.tur.toLowerCase();
if (x < y) {return -1;}
if (x > y) {return 1;}
return 0;
});