Bugün JavaScript dizilerde sıralama (hem küçükten büyüğe sıralamayı hem de büyükten küçüğe sıralamayı) ve dizinin en küçük elemanı ile en büyük elemanını nasıl bulabileceğimizi öğreneceğiz.
JavaScript Dizileri Alfabetik Olarak Sıralama
JavaScript de dizileri alfabetik olarak sıralamak için 2 metod bulunuyor.
- sort() Metodu
- reverse() Metodu
İlk olarak string veri türünde elemanları olan bir diziyi sort metodu ile sıralayalım.
1 2 3 4 5 6 7 8 9 |
<script> var arabalar = ["Toyota","Volvo","BMW","Hyundai","Audi"]; console.log(arabalar.sort()); </script> |
Çıktısı : [“Audi”, “BMW”, “Hyundai”, “Toyota”, “Volvo”]
arabalar dizisini sort metodu ile alfabetik olarak sıraladık.
Eğer bir diziyi tersten sıralamak istiyorsak o zaman reverse metodunu kullanmalıyız.
1 2 3 4 5 6 7 8 9 |
<script> var arabalar = ["Toyota","Volvo","BMW","Hyundai","Audi"]; console.log(arabalar.reverse()); </script> |
Çıktısı : [“Audi”, “Hyundai”, “BMW”, “Volvo”, “Toyota”]
Reverse metodu ile dizi tersten sıralandı ama alfabetik olarak sıralanmadı.
Eğer hem alfabetik hem de tersten sıralanmasını istiyorsanız sort ve reverse metodlarını birlikte kullanabilirsiniz.
1 2 3 4 5 6 7 8 9 |
<script> var arabalar = ["Toyota","Volvo","BMW","Hyundai","Audi"]; console.log(arabalar.sort().reverse()); </script> |
Çıktısı : [“Volvo”, “Toyota”, “Hyundai”, “BMW”, “Audi”]
JavaScript Dizileri Sayısal Olarak Sıralama
Sort metodu sayısal değerler ile doğru çalışmayabilir. Örneğin;
1 2 3 4 5 6 7 8 9 |
<script> var sayilar = [13, 34, 22, 150, 130]; console.log(sayilar.sort()); </script> |
Çıktısı : [13, 130, 150, 22, 34]
Dikkat ederseniz sort metodu diziyi küçükten büyüğe sıralarken yanlış sıraladı.
Bunun nedeni, sort metodu sayıları string bir değermiş gibi algılıyor. Örneğin 150 ile 22 değerleri üzerinden inceleyecek olursak;
Bu iki sayının da ilk basamağına bakıyor ve 1 rakamı 2’den küçük olduğu için 150 sayısını 22 den küçük olarak hesaplıyor.
Bu problemi şu şekilde çözebiliriz.
1 2 3 4 5 6 7 8 9 |
<script> var sayilar = [13, 34, 22, 150, 130]; console.log(sayilar.sort(function(a, b){return a - b})); </script> |
Çıktısı : [13, 22, 34, 130, 150]
Sort metodu içerisine yazdığımız tek satırlık kod ile bu problemi çözebiliyoruz.
Sayısal değerlerden oluşan bir diziyi tersten yani büyükten küçüğe sıralamak için ise aşağıdaki kodu kullanıyoruz.
1 2 3 4 5 6 7 8 9 |
<script> var sayilar = [13, 34, 22, 150, 130]; console.log(sayilar.sort(function(a, b){return b - a})); </script> |
Çıktısı : [150, 130, 34, 22, 13]
Her defasında diziyi rastgele sırayla sıralamak için aşağıdaki kodu kullanabilirsiniz.
1 2 3 4 5 6 7 8 9 |
<script> var sayilar = [13, 34, 22, 150, 130]; console.log(sayilar.sort(function(a, b){return 0.5 - Math.random()})); </script> |
Random metodunu rastgele sayı üretmek için kullanıyoruz. Random metodu ile ilgili daha fazla bilgi için JavaScript Random Kullanımı (Rastgele Sayı Üretme) yazımı okuyabilirsiniz.
JavaScript Dizilerde En Büyük veya En Küçük Değeri Bulma
JavaScript de dizi elemanları içerisindeki en büyük veya en küçük değeri bulmak için hazır bir metod bulunmuyor.
Bunun için 3 farklı yöntemi kullanabiliriz.
1. Yöntem : Diziyi küçükten büyüğe sıraladıktan sonra en küçük eleman için dizinin sıfırıncı ([0]) indeksine en büyük eleman için ise dizinin son indeksine ([diziAdi.length – 1]) bakabiliriz.
İlk olarak bir dizideki en küçük değeri bulalım.
1 2 3 4 5 6 7 8 9 10 11 |
<script> var sayilar = [13, 34, 22, 150, 130]; sayilar.sort(function(a, b){return a - b}); console.log("En küçük sayı : " + sayilar[0]); </script> |
Çıktısı : En küçük sayı : 13
Şimdi de bir dizideki en büyük değeri bulalım.
1 2 3 4 5 6 7 8 9 10 11 |
<script> var sayilar = [13, 34, 22, 150, 130]; sayilar.sort(function(a, b){return a - b}); console.log("En büyük sayı : " + sayilar[sayilar.length - 1]); </script> |
Çıktısı : En büyük sayı : 150
Sadece en küçük veya en büyük değeri bulmak için tüm diziyi sıralamak çok verimsiz bir yöntemdir.
2. Yöntem : Bir dizideki en yüksek değeri bulmak için Math.max.apply metodunu, bir dizideki en küçük değeri bulmak için ise Math.min.apply metodunu kullanabiliriz.
Bunun için küçük bir fonksiyon yazmamız gerekiyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<script> var sayilar = [13, 34, 22, 150, 130]; function maxItem(myArray) { return Math.max.apply(null, myArray); } function minItem(myArray) { return Math.min.apply(null, myArray); } console.log("En büyük sayı : " + maxItem(sayilar) + " - " + "En küçük sayı : " + minItem(sayilar)); </script> |
Çıktısı : En büyük sayı : 150 – En küçük sayı : 13
Aşağıdaki 2 kod aslında aynı işlemi gerçekleştiriyor.
- Math.min.apply(null, [13, 34, 22, 150, 130])
- Math.min(13, 34, 22, 150, 130)
3. Yöntem : Bir dizideki en küçük veya en büyük değeri bulmak için en kullanışlı yöntem kendi fonksiyonumuzu yazmaktır.
Bu işlem için aşağıdaki fonksiyonları kullanabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<script> var sayilar = [13, 34, 22, 150, 130]; function maxItem(myArray) { var leng = myArray.length; var max = -Infinity; while (leng--) { if (myArray[leng] > max) { max = myArray[leng]; } } return max; } function minItem(myArray) { var leng = myArray.length; var min = Infinity; while (leng--) { if (myArray[leng] < min) { min = myArray[leng]; } } return min; } console.log("En küçük sayı : " + minItem(sayilar) + " - " + "En büyük sayı : " + maxItem(sayilar)); </script> |
Çıktısı : En küçük sayı : 13 – En büyük sayı : 150
Umarım “JavaScript Dizilerde Sıralama – En Küçük veya En Büyük Değeri Bulma” yazım sizin için faydalı olmuştur.
Yeni bir yazımda görüşmek üzere.
Kaynaklar : w3schools.com