myNotlar Logo

Nesne içeren Array dizilerinin isteğe göre sıralanması


Bu örnek, belli bir sınıf tipinin örneği olan nesneleri içeren Array dizilerinin nesne yapısındaki değerlerin isteğe bağlı karşılaştırılarak sıralanmasının nasıl yapılacağını göstermektedir.

Bu örnek, Çok boyutlu dizilerin isteğe göre sıralanması konusundan farklı olarak sıralanacak dizinin, belli bir sınıf tipinin örneği olan nesneleri içerdiği varsayılmaktadır. Dizinin bir "ürün sipariş listesi" olduğu ve sipariş kalemlerinin "Sipariş Kodu", "Ürün Adı" ve "Sipariş Miktarı" bilgilerini tuttuğu düşünülerek basitçe aşağıdaki gibi bir sınıf yapısı tanımlanmıştır. Bu yapı aynı zamanda sınıfın kurucu fonksiyonunu tanımlar. Yani new ile alttaki gibi bir ifade kullanılarak nesne örneği oluşturulabilir.

function SiparisSinif(_sipKodu, _urunAdi, _sipAdet)
{
	this.sipKodu = _sipKodu;	// Sipariş kodu
	this.urunAdi = _urunAdi;	// Sipariş edilen Ürün adı
	this.sipAdet = _sipAdet;	// Ürün sipariş adedi
}
var Degisken = new SiparisSinif(1, ürünAdı, Miktarı);

Aşağıda gösterilen, Array.sort() metoduna aktarılacak karşılaştırma fonksiyonu nesnelerin küçükten büyüğe doğru sıralanmasını sağlar. Büyükten küçüğe doğru sıralama yapılmak istendiğinde örnekte de gösterildiği gibi ayrı bir yordam (method) tanımlanmalı ve '-1' ve '1' değerleri yani pozitif ve negatif değerlerin yerleri değiştirilmelidir.

function karsilastir(elemanA, elemanB)
{
   // karşılaştırma işlemleri
   if(elemanA < elemanB) return -1;
   if(elemanA > elemanB) return 1;
   return 0;
}

Array.sort(karsilastir);

Aşağıdaki örnek, SiparisSinif isimli bir nesne tanımlanarak, bu nesnenin 7 farklı örneğini tutan bir Array dizisinin bu nesnelerin değerlerine göre ada göre ve koda göre sıralama yapılmasını göstermektedir.

<script type="text/javascript">
// "SiparisSinif" nesnesinin kendisi ve "kurucu fonksiyonu"
function SiparisSinif(_sipKodu, _urunAdi, _sipAdet)
{
    this.sipKodu = _sipKodu;    // Sipariş kodu
    this.urunAdi = _urunAdi;    // Sipariş edilen Ürün adı
    this.sipAdet = _sipAdet;    // Ürün sipariş adedi :String
}

// İsme göre karşılaştırma fonksiyonu 
function adaGore(A, B)
{
    if(A.urunAdi < B.urunAdi) return -1;
    if(A.urunAdi > B.urunAdi) return 1;
    
    return 0; // İki dizide birbirlerine eşittir.
}

// Koda göre karşılaştırma fonksiyonu 
function kodaGore(A, B)
{
    if(A.sipKodu < B.sipKodu) return -1;
    if(A.sipKodu > B.sipKodu) return 1;
    
    return 0; // İki dizide birbirlerine eşittir.
}

// Dizi elemanlarını sayfaya yazdırır.
function DiziyiGoster(Array_Dizi)
{
    var gosterilecek = "";
    
    for(i = 0; i < Array_Dizi.length; i++)
    {
        gosterilecek += (i+1) + " : <b style='color:navy;'>" + 
        Array_Dizi[i].sipKodu + " - " +
        Array_Dizi[i].urunAdi + " - " +
        Array_Dizi[i].sipAdet + "</b><br/>";
    }
    
    document.getElementById("bilgiKutu").innerHTML = gosterilecek;
}

function siralaAdaGore()
{
    Dizi.sort(adaGore);
    DiziyiGoster(Dizi);
}

function siralaKodaGore()
{
    Dizi.sort(kodaGore);
    DiziyiGoster(Dizi);
}

var Dizi = new Array();

// Dizini her sırasına bir 'SiparisSinif' tanımlanıyor.
Dizi[0] = new SiparisSinif(1, "Ram SDRam - 256MB 266Mhz", "2 adet");
Dizi[1] = new SiparisSinif(2, "Ram DDR² - 2048MB", "10 adet");
Dizi[2] = new SiparisSinif(3, "Ergonomik Koltuk", "1 adet");
Dizi[3] = new SiparisSinif(4, "Margarin", "1 adet");
Dizi[4] = new SiparisSinif(5, "Ekmek", "2 adet Çiftli");
Dizi[5] = new SiparisSinif(6, "Hazır Kahve", "10 Kg");
Dizi[6] = new SiparisSinif(7, "50\" Monitör 6000x4000", "1 Adet");
</script>

<input type="button" value="Ada Göre Sırala" onClick="siralaAdaGore()"/>
<input type="button" value="Koda Göre Sırala" onClick="siralaKodaGore()"/>

<div id="bilgiKutu"></div>
Test Edin
İlgili Başlıklar
 
myNotlar Hakkında
Telif Hakkı © 2007-2009 mynotlar.com Tüm Hakları Saklıdır. Kopyalanamaz. Yayınlanamaz.
E-Posta : support@myNotlar.com

| Tek Kişilik Oyunlar | Sudoku | YasinKa |