Her son yinelemeyi yakalamak


95
arr = [1,2,3];
arr.forEach(function(i){
// last iteration
});

Döngü bittiğinde nasıl yakalanır? Yapabilirim if(i == 3)ama dizimin sayısının ne olduğunu bilmiyorum.

Yanıtlar:


173

ES6 + için güncellenmiş cevap burada .


arr = [1, 2, 3]; 

arr.forEach(function(i, idx, array){
   if (idx === array.length - 1){ 
       console.log("Last callback call at index " + idx + " with value " + i ); 
   }
});

çıktı:

Last callback call at index 2 with value 3

Bunun çalışma şekli arr.length, geri arama işlevine iletilen dizinin geçerli dizinine göre test etmektir .


Bunun arkasına geçebilirim, biraz daha net, ancak aslında başka bir şeyi garanti ettiğinden emin değilim, çünkü arrzaten her geri arama için bir kapanış kapsamındadır
— jdphenix

ve gönderdikten hemen sonra, açık bir kullanım örneğini fark ettim - geri aramayı başka bir yerde tanımlamış olsaydınız. Utanmış bir yüz takın.
— jdphenix

utanmış bir yüze gerek yok. Tam o soruyu sormuştum (arr varken neden diziye ihtiyacınız var), ama gözleminiz / sorunuz bunu açıklığa kavuşturdu, çok teşekkürler. Bu cevabı kendinizin yazmanız ve kendi cevabınızı sorgulamanız garip olsa da? Yanıtladığınız başka yorumlar silinmiş olabilir mi?
— redfox05

@Russell Doğru, o zamandan beri kısmen kaldırılan bir tartışma var (oldu).
— jdphenix

34

2018 ES6 + CEVAP :

    const arr = [1, 2, 3];

    arr.forEach((val, key, arr) => {
      if (Object.is(arr.length - 1, key)) {
        // execute last item logic
        console.log(`Last callback call at index ${key} with value ${val}` ); 
      }
    });

Bunu bugün daha çok seviyorum - yine de 2015'te bile dolaylı olarak küresel ilan etmenin kötü bir fikir olduğunu hemen kabul edeceğim.
— jdphenix

1
Unutmayın, bu const ve let'in global bildirimler olmadığını unutmayın, çünkü bunlar yöntemin tepesine yükselen var'ın aksine ... sadece anlık kapsamda geçerlidir.
— Sterling Bourne

Huhh ... Önceki sürüm çok daha kısa ve okunabilir. Bu Nesne meselesi bir karmaşa.
— giorgio79

2
Eğer anlamazsan bu sadece bir karışıklık Giorgio79. == veya === ile birincil karşılaştırma yönteminiz olarak Object.is () kullanmanın sayısız yararı vardır. Ancak yorumunuz için teşekkürler!
— Sterling Bourne

2
@SterlingBourne bu faydaların ne olduğunu daha fazla açıklayabilir misiniz? (Bunu yanıta dahil etmek iyi olur)
— ludovico

4
const arr= [1, 2, 3]
arr.forEach(function(element){
 if(arr[arr.length-1] === element){
  console.log("Last Element")
 }
})

2
Her zaman işe yaramayabilir. let o = { val:"ue" } ; let arr = [ o, 1, o ]; ...maalesef ilk yinelemedearr[arr.length-1] === element
— e2-e4
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.