JavaScript forEach Sıkıntısı

Katılım
3 Temmuz 2019
Mesajlar
1.576
Çözümler
16
Daha fazla  
Cinsiyet
Erkek
Ekran Alıntısı.PNG


Normalde burada olması gereken şey, kodlardaki belli bir kısmı silmek. Ama bu kodu çalıştırınca, son 5 tanesi hariç hepsine yapıyor. Neden acaba? Normalde hepsini silmesi gerek ama son 5 tanesi olmuyor. Lazım olursa kodları daha detaylı paylaşabilirim.

JavaScript:
taskList.childNodes.forEach(function(item) {
    if (item.nodeType == 1) {
        item.remove();
    }
})
 
Son düzenleme:
Her defasında bir adet element siliniyor, sonra bir tane atlıyor. Yani mesela [1,2,3,4,5] olsun.
[1,3,5] siliniyor.

5 hariç diye de bir şey yokmuş. Orası yanlış.

Kendimce bir fikrim var,
şimdi elemanlar üzerinde forEach ile gezerken mesela elemanlar[0] değerini alıyor ve siliyor.
[1,2,3,4,5] ===> [2,3,4,5]
Şimdi de eleman[1] değeri silinecek. Ama eleman[1] değeri artık bir sonraki değer olacak. Yani 2 atlanacak.
[2,3,4,5] ===> [2,4,5]
eleman[1] burada 3 değeri oldu ve silindi. Çünkü aradaki değerlerden biri kalktı.
 
Son düzenleme:
=== ile tekrar denemelisin.
Sonuç aynı.
@Sanch JS kodlarını bilmiyorum ama ben verdiğiniz örnekteki gibi bir şey yapacak olsam ilk önce o kümenin ([1, 2, 3, 4, 5]) uzunluğunu alırdım ve bu şekilde denerdim. Bunu denerken if bloğunu kaldırıp sıkıntının nerede olduğunu çözmeye çalışırdım.
Sıkıntıyı çözdüm zaten. Anlayınca biraz saçma geldi. Muhtemelen yukarıda bahsettiğim şey 😁 .
 
@Sanch Çözümünü buraya yazarsanız sonradan bakan arkadaşlarda faydalanır :).
Çözüm olarak başka bir yöntem kullandım, neden atlayarak gittiğini hâlâ anlamış değilim.
Çözüm için kullandığım kod:
JavaScript:
taskList.innerHTML = "";
O şekilde silmek yerine direk oradaki tüm elemanları sıfırladım ve silinmiş oldu.

Yöntem 2:

JavaScript:
while (taskList.firstChild) {
            taskList.removeChild(taskList.firstChild);
}

Bu şekilde de, eleman olduğu sürece ilk eklenen elemanı silecek, yani eleman olduğu sürece silme işlemi yapacak. Bu şekilde hepsi silinecek.


Önceki kodun neden atlayarak gittiğini bilen bir arkadaşım varsa yardımı çok iyi olur.

Her defasında bir adet element siliniyor, sonra bir tane atlıyor. Yani mesela [1,2,3,4,5] olsun.
[1,3,5] siliniyor.


Kendimce bir fikrim var,
şimdi elemanlar üzerinde forEach ile gezerken mesela elemanlar[0] değerini alıyor ve siliyor.
[1,2,3,4,5] ===> [2,3,4,5]
Şimdi de eleman[1] değeri silinecek. Ama eleman[1] değeri artık bir sonraki değer olacak. Yani 2 atlanacak.
[2,3,4,5] ===> [2,4,5]
eleman[1] burada 3 değeri oldu ve silindi. Çünkü aradaki değerlerden biri kalktı.

Ben böyle düşündüm ama yanlış olabilir.
 
Uyarı! Bu konu 6 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Geri
Yukarı