Javascript Linkedlist Sorunu
-
Hocalarım JavaScript'de ArrayList<Object> kullanımı gibi bişey bulamadığım için kendi LinkedList'imi yapayım dedim fakat bir yerde kafayı yedim...
Silme Fonksiyonum şu ;
Liste.prototype.Sil=function (KullaniciAdi) { var Bas=this.Bas; var Etkin; if(Bas.KullaniciAdi.toLowerCase()==KullaniciAdi.toLowerCase()) { if(Bas.Sonraki==null) { this.Bas=null; }else{ this.Bas=Bas.Sonraki; } } while(Bas!=null) { if(Bas.KullaniciAdi.toLowerCase()==KullaniciAdi.toLowerCase()) { console.log(Bas.Sonraki); if(Bas.Sonraki==null) { console.log("null"); Etkin.Sonraki = null; } else { console.log("Değil"); Etkin.Sonraki = Bas.Sonraki; } return; } Etkin=Bas; Bas=Bas.Sonraki; } };
Burada Sildiğim zamanki Etkin.Sonraki=Bas.Sonkrai; Kod bloğunda hata veriyor. Bas.Sonraki bulunamadı diyor. Ama Üst tarafta ben Bas.Sonraki'yi Log çıktısı olarak alıyorum olan bişeyi yok olarak gösteriyor ..
Ben mi yanlış yapıyorum dedim dün gece 5 gibi bıraktım sabah 11 gibi uyandım saat 1.5 olmuş halen bakıyorum yok..
JavaScript taraflı mı çözemedim...
Sorunum nedir ?
-
Koddaki hatayı anlamadım ama. https://code.tutsplus.com/articles/data-structures-with-javascript-singly-linked-list-and-doubly-linked-list--cms-23392
şu var hocam.
-
Terror , hocam teşekkür ediyorum. Mantığı zaten bildiğim için kendi kodumu yazıyorum muhtemelen javascript'de olan bişeyden kaynaklanıyor
-
JavaScript bilmiyorum fakat Etkin değişkenine başlagıç değeri vermediğinden dolayı hata veriyor olabilir mi?
-
Etkin değeri zaten bas null olmadığı sürece atanıyor hocam onda sıkıntı yoky
-
return; kaldırıp, dener misin?
bir de while kullanımında sorun olabilir, oraya bakmak lazım, while hakkında malesef bilgim yok.
RockZs tarafından 19/Oca/17 18:34 tarihinde düzenlenmiştir -
Kendi prototipini yapman güzel birşey,
fakat neden ayrıca ArrayList<Object> yaptın ?
Javascript'te herşey objedir, array'ler dahil. Fonksiyonlar bile. O yüzden Object list tutmak bana çok mantıksız gözüktü, JSON neden var diye düşünüyorum.Ekstra arama, sorting özellikleri falan ekliyorsan bilemem, direk temel Array gibi elementlerin protitplerine de ekleyebilirsin.
Ben olayı anlamadım.
Syntatic sugar desem, paradigma uymuyor. -
@kvasir ,
Hocam Ben'im html içerisinde gömülü divlerim ve o divlere ait kullanıcıalrın bilgileri var .. Bu bilgiler sürekli değişkenlik gösteriyor .. Bunu da bir Obje haline getirip kontrolünü düzgün bir şekilde yapmak istiyorum..
Yani
Liste.AramaYap("MhmdAlmz").IsminiDegistir("Deneme123"); dedigim zaman o div içerisindeki MhmdAlmz ismini Deneme123 olarak değiştirecek... Mesela kaç kullanıcı var dedigim zaman divleri saymak yerine Liste.KisiSayisi dedigimde vericek... Daha sonra birini sildikten sonra divID vs aramadan gelip Liste.Sil("MhmdAlmz") dedigimde o class'ı (Obje) silecek. ek larak da divi sileceğimm.
Hem düzenli kod. Hemde daha hızlı olacak. ID'ye göre B- Tree yapmayı düşünüyorum ... daha sonra da full balanced yapmayı düşünüyorum Ağaç dengesizliklerini giderip... Bu sayede Sayfaya hem hakim hemde daha hızlı işlem yapacağım... Bu yüzden kullandım..
Ama işte herşey okey iken Silmede Sıkıntı cıkarıyor..
if(!Bas) ile if(Bas!=null) arasında bi fark var ama ne çözemedim.. :(((
-
Neden var Etkin = this.Bas ile başlamıyorsun biraz kafam karıştı ama işine yarabilecek kaynak şurda var.
http://cdn.tsq.me/ebook/Data%20Structures%20and%20Algorithms%20with%20JavaScript.pdf
İngilizce sorun mu bilmiyorum ama sayfa 80-81 e baksan çok güzel anlaşılıyor mantık
-
Hocam mantığı biliyorum da :( Sonraki null diyor bana mantıkta da sıkıntı olduğunu düşünmüyorum tamamen dilden kaynaklanan bir yanlış diye düşünüyorum..
-
ilk dikdörtgende objenin "Bas" property'sini "Bas.Sonraki" yapıyorsun, ondan önce "var Bas=this.Bas" yapıp ana objeden veri çektiğin için,
if'in içinde "Bas.Sonraki" üzerinden sorgu yapmak "Bas.Bas.Sonraki" üzerinden sorgu yapmak demek.
Bu hatalara gelmemek için tip kontrolü yap, typeof'la, constructor veya prototype get ederek. En azından nerede hata yaptığını daha iyi görürsün.Ayrıca tip kontrolü yaparken == veya != değil === veya !== kullan çünkü kesin olarak ya o tiptir ya da değil, o yüzden daha kesin === operatürünü kullanmalısın.