Bir tabloda listelenen json veriyi istediğimiz her alanına göre sıralayabiliriz. Bunun için javascript’in dizi metodlarından sort metodunu kullanacağız. Sort metodu parametre olarak bir fonksiyon alır ve bu fonksiyonlar her türdeki verileri sıralayabiliriz. Bana göre bunlardan en işlevsel olanı da json veriyi sıralamak. Sürekli sunucuya bağlanmak zorunda kalmayız ve sunucunun işini yüksek oranda kolaylaştırır.
Önce <script> taqlarının arasına json verimizi bir değişkene aktararak ekliyoruz. Bu veriyi bir json dosyasındanda okuyabilirsiniz. Json verimiz aşağıdaki gibidir.
1 2 3 4 5 6 7 8 9 10 11 12 |
var o= { "ogrenciler":[ {"ad":"Hasan","soyad":"Gider","yas":18}, {"ad":"Ayşe","soyad":"Dursun","yas":20}, {"ad":"Çetin","soyad":"Fidan","yas":17}, {"ad":"Cemal","soyad":"Kaya","yas":12}, {"ad":"Cenk","soyad":"Dağlar","yas":20}, {"ad":"Tarık","soyad":"Bakır","yas":19} ] }; |
Sayfanın hmtl kısmında ise bir tablo yapısı ve bu tabloyu doldurmak için kullandığımız bir buton yer almaktadır. Butonun click olayınada doldur adını verdiğimiz bir içine parametre olarak sıralamak istediğimiz alanın adını yazdığımız bir bir metot da bulunmaktadır. Sayfanın body etiketleri arasında yazılan kod kısmı aşağıda verilmiştir.
1 2 3 4 5 |
<table id="tablo" width="500px" border="1"> </table> <input type="button" id="btn" value="Doldur" onclick="doldur('ad')"> |
Yukarıda doldur metodu çalıştırılırken ad alanı parametre olarak gönderildiği için ad alanına göre sıralı olarak gelmektedir. Şimdide doldur metodunu inceleyelim doldur metodunu json verimizin hemen altına ekleye bilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function doldur(alan){ o.ogrenciler.sort(function(o1,o2){return eval("o1."+alan)>eval("o2."+alan)}); var tablo = document.getElementById('tablo'); var mevcut = o.ogrenciler.length; var satir = '<tr><td><a href="javascript:doldur(\'ad\')">Ad</a></td><td><a href="javascript:doldur(\'soyad\')">Soyad</a></td><td><a href="javascript:doldur(\'yas\')">Yaş</a></td></tr>'; tablo.innerHTML = satir; for(var i=0;i<mevcut;i++){ var ogrenci = o.ogrenciler[i]; satir = '<tr><td>'+ogrenci.ad+'</td><td>'+ogrenci.soyad+'</td><td>'+ogrenci.yas+'</td></tr>'; tablo.innerHTML += satir; } } |
Doldur metodunda asıl sıralama işlemini yapan o.ogrenciler.sort(function(o1,o2){return eval(“o1.”+alan)>eval(“o2.”+alan)}); satırıdır. Sort metodu parametre olarak bir anonim fonksiyon çağırır ve bu fonksiyon iki parametre alır. Bu parametreler ile biz sıralanacak alanı belirleriz. Fonsiyonun içinde eval metodu dikkatinizi çekmiştir. Bu metod metinsel olarak aldığı parametreyi çalıştırılabilir javascript koduna çevirir. Json nesnemizdeki her bir öğrenci o1 ve o2 olarak fonksiyona parametre olarak gönderilir. Biz öğrencilerin istediğimiz verilerine o1 den sonra nokta ekleyerek ulaşabiliriz. Örneğin o1.ad yazdığımızda ogrencinin adı o1.yas dediğimizde de ogrencinin yaşını öğrenmiş oluruz. eval metodu burada metinsel o1 ifadesi ile fonksiyona sıralamak için gönderdiğimiz alan değişkenini birleştirerek javascript kodu üretmektedir. Örneğin alan değişkeninin içinde yaş değeri gönderilmiş ise eval metodu o1.yas ifadesine dönüşecek ve öğrelerin yaşını karşılaştırmış olacağız bu sayede öğrencileri yaşına göre sıralamış olacağız.
1 2 3 |
var mevcut = o.ogrenciler.length; |
ifadesiyle json verimizdeki öğrenci sayısını öğreniyoruz. Döngümüzü bu sayı ile çalıştırarak tüm öğrencilerimiz ekrana yazabiliriz.
1 2 3 4 |
var satir = '<tr><td><a href="javascript:doldur(\'ad\')">Ad</a></td><td><a href="javascript:doldur(\'soyad\')">Soyad</a></td><td><a href="javascript:doldur(\'yas\')">Yaş</a></td></tr>'; tablo.innerHTML = satir; |
ifadesiyle tablomuzun başlık kısmını oluşturuyoruz ve her bir başlığı link haline dönüştürüp bu linklere doldur metodunu atadık. Böyleşe başlık adını parametre olarak alan doldur metodu tabloyu bu alana göre sıralamaktadır. Bir linke tıklandığında bir javascript metodunu çalıştırmak istiyorsak href özelliğine öncelikle “javascript:” yazdıktan sonra metodun adını yazmamız gerekir. tablo.innerHTML = satir yazdığımız için butona tıklandığında sürekli tabloya ekleme yapmaz tablo önce sıfırlanır, sonra veriler yeniden eklenir.
1 2 3 4 5 6 7 |
for(var i=0;i<mevcut;i++){ var ogrenci = o.ogrenciler[i]; satir = '<tr><td>'+ogrenci.ad+'</td><td>'+ogrenci.soyad+'</td><td>'+ogrenci.yas+'</td></tr>'; tablo.innerHTML += satir; } |
ifadesiyle önce json verimizdeki tüm öğrencileri ogrenci adını verdiğimiz bir değişkene tek tek atıyoruz. Ve öğrencilerin verileri bir tablonun satırı oluşturup sütun isimlerinin içine sırasıyla öğrenci verilerini yazıyoruz. Kod ların hepsine bütün olarak aşağıdan ulaşabilirsiniz.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Javascript</title> <script> var karakterler=['a']; var o= { "ogrenciler":[ {"ad":"Hasan","soyad":"Gider","yas":18}, {"ad":"Ayşe","soyad":"Dursun","yas":20}, {"ad":"Çetin","soyad":"Fidan","yas":17}, {"ad":"Cemal","soyad":"Kaya","yas":12}, {"ad":"Cenk","soyad":"Dağlar","yas":20}, {"ad":"Tarık","soyad":"Bakır","yas":19} ] }; function doldur(alan){ o.ogrenciler.sort(function(o1,o2){return eval("o1."+alan)>eval("o2."+alan)}); var tablo = document.getElementById('tablo'); var mevcut = o.ogrenciler.length; var satir = '<tr><td><a href="javascript:doldur(\'ad\')">Ad</a></td><td><a href="javascript:doldur(\'soyad\')">Soyad</a></td><td><a href="javascript:doldur(\'yas\')">Yaş</a></td></tr>'; tablo.innerHTML = satir; for(var i=0;i<mevcut;i++){ var ogrenci = o.ogrenciler[i]; satir = '<tr><td>'+ogrenci.ad+'</td><td>'+ogrenci.soyad+'</td><td>'+ogrenci.yas+'</td></tr>'; tablo.innerHTML += satir; } } function ara(){ var aranan = document.getElementById('txtara').value; var ogrenciler2 = o.ogrenciler.filter(function(o){return o.ad == aranan ||o.soyad == aranan || o.yas == aranan }); var tablo = document.getElementById('tablo'); var mevcut = ogrenciler2.length; var satir = '<tr><td><a href="javascript:doldur(\'ad\')">Ad</a></td><td><a href="javascript:doldur(\'soyad\')">Soyad</a></td><td><a href="javascript:doldur(\'yas\')">Yaş</a></td></tr>'; tablo.innerHTML = satir; for(var i=0;i<mevcut;i++){ var ogrenci = ogrenciler2[i]; satir = '<tr><td>'+ogrenci.ad+'</td><td>'+ogrenci.soyad+'</td><td>'+ogrenci.yas+'</td></tr>'; tablo.innerHTML += satir; } } </script> </head> <body> <table id="tablo" width="500px" border="1"> </table> <input type="button" id="btn" value="Doldur" onclick="doldur('ad')"><br> <input id="txtara"><input type="button" value="Ara" onclick="ara()"> </body> </html> |