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:
Çözüm olarak başka bir yöntem kullandım, neden atlayarak gittiğini hâlâ anlamış değilim.
Index tabanlı silme yapıyor olsaydınız. Elemanları sildikçe indexleri değişeceği(kayacağı) için atlamalı ilerleyebilir diyebilirdim. Ancak nodeType'ın liste konumu ile bir alakası yok.
JavaScript'in garip buglarından birisi olabilir.
 
Index tabanlı silme yapıyor olsaydınız, elemanları sildikçe indexleri değişeceği (kayacağı) için atlamalı ilerleyebilir diyebilirdim. Ancak nodeType'ın liste konumu ile bir alakası yok.
JavaScript'in garip buglarından birisi olabilir.
Muhtemelen, bana da bug gibi geldi. Çünkü herhangi bir sıkıntı göremiyorum.
 
Muhtemelen, bana da bug gibi geldi. Çünkü herhangi bir sıkıntı göremiyorum.
Benzer durum Java üzerinde de geçerli aslında.
ForEach ile gezilen bir listenin üzerinde değişiklik yaparsanız. Saçma sonuçlar alınabiliyor.
Bir veri yapısının ForEach ile gezilebilmesi için dilden dile farklılık gösterse de; Iterable Interface'i implement etmesi gerekiyor. Bu interface içerisinde hasNext() methodunu barındırıyor.
Sanırım current item'ı silmek bu yapıya zarar veriyor.

Altta verdiğim kodda bazen IndexOutOfBoundsException, bazen ConcurrentModificationException veriyor.
Java:
    ArrayList<Integer> myList = new ArrayList<>();
        for (int i = 0; i < 50; i++)
        {
            myList.add((int) (Math.random() * 100));
        }
        System.out.println("-------");
        int count = 0;
        int deleted = 0;
        for (int i : myList)
        {
            count++;
            if (Math.random() < 0.1) // 10% chance delete current item
            {
                myList.remove(i);
                deleted++;
            }
        }
        System.out.printf("\nCount = %d; Deleted = %d\n", count, deleted);
 
Son düzenleme:
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

Yeni konular

Geri
Yukarı