JQuery.each () util sonraki yinelemeye atlamak nasıl?


434

Öğeleri bir dizi üzerinden yineleme çalışıyorum. jQuery belgeleri şunları söylüyor:

jquery.Each () belgeleri

False olmayan değer döndürmek, for döngüsünde devam ifadesiyle aynıdır, hemen sonraki yinelemeye atlar.

'Yanlış olmayan dönüş' çağrısını denedim. ve 'yanlış olmayan'; (sans return) ikisi de sonraki yinelemeye atlamaz. Bunun yerine, döngüyü kırıyorlar. Neyi kaçırıyorum?


9
Sonsuz bilgeliklerinde, jQuery'deki bodrumlar bu notu dokümantasyondan kaldırdı - ya da en azından her biri için sayfada değil . Bu soruyu hala SO'da ve Google'da uzantıda bulabileceğinizi görmekten çok memnunum, çünkü bu her zaman unuttuğum basit şeylerden biri :)
Doug McLean

Yanıtlar:


783

Sahte olmayanlarla ne demek istedikleri:

return true;

Yani bu kod:

var arr = ["one", "two", "three", "four", "five"];
$.each(arr, function(i) {
  if (arr[i] == 'three') {
    return true;
  }
  console.log(arr[i]);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

günlüğe kaydeder one, two, four, five.


16
Sadece mevcut yinelemeden çıkmak için sadece 'return' döndürmek yeterlidir. Ve tüm yinelemelerden çıkmak için false değerini döndürün.
Saulius

7
Bu kod çalıştırıldığında bir işlev içinde olduğunuz için bunun işe yaradığını söylemeye değer.
Ukuser32

i döndüğümde (arr [i] === 'üç'); neden çalışmıyor ??
ajayv

Bana göre, yanlış olmayan demek yanlış dönmek dışında her şeyi döndürebilirsiniz;
Hoang Trung

61

'False olmayan döndürme' ile, boole false değerine ulaşmayacak herhangi bir değeri döndürmek anlamına gelir. Eğer geri dönebilirler Yani true, 1, 'non-false'veya herhangi başka yukarı düşünebiliriz.


20
neden sadece müstehcenlik için "geri dön" devam et;
Alexander Mills

devam etmeye ne dersiniz? C keskin bir varyasyon çalıştı Bu yüzden sadece JS benzer bir etkisi olacağını tahmin ediyorum
Brandito

@Brandito Normal bir döngü gibi çalışmıyor - bir işlevi özyinelemeli olarak çağırıyor, bu nedenle döngünün devam edebilmesi için işlevin içindeki işlemi sonlandırmanız gerekiyor.
TJ L

5

Javascript türünde 'doğruluk' ve 'yanlışlık' fikri vardır. Eğer bir değişken bir değere sahipse, genellikle göreceğiniz gibi 9) 'doğruluk' vardır - null, ya da hiçbir değer 'sahtelik' eğilimindedir. Aşağıdaki parçacıklar yardımcı olabilir:

var temp1; 
if ( temp1 )...  // false

var temp2 = true;
if ( temp2 )...  // true

var temp3 = "";
if ( temp3 ).... // false

var temp4 = "hello world";
if ( temp4 )...  // true

Umarım bu yardımcı olur mu?

Ayrıca, Douglas Crockford bu videoları kontrol değer

güncelleme: kırık bağlantıları tespit ettiğiniz için teşekkürler @cphpython - Şimdi çalışan sürümleri işaret edecek şekilde güncelledim

Javascript dili

Javascript - İyi Parçalar


1
Bağlantılar koptu ... Btw, 0aynı zamanda bir sahte değerdir ve bunun olumsuzlanması doğrudur (ve diğer herhangi bir sayıya tersi !-42 === false).
CPHPython

4

Bir sonraki yinelemeye geçmek için bazen bloğun sonundan düşebileceğinizi unutmayın:

$(".row").each( function() {
    if ( ! leaveTheLoop ) {
        ... do stuff here ...
    }
});

Aslında böyle dönmek yerine:

$(".row").each( function() {
    if ( leaveTheLoop ) 
        return; //go to next iteration in .each()
    ... do stuff here ...
});

3
Kaba olmak istemiyorum ama bu acı verici bir tasarım. Demek istediğim ... Üniversitemin ilk 2 yılında, daha iyi bilmediğimde (o zaman bile hoşlanmadım), ama tavsiye edilmesi gereken bir şey değil ...
xDaizu

@ DanielParejoMuñoz, seni duyuyorum, ama aynı fikirde değiliz. Bir iade ifadesi olmamak istediğiniz bir şey olmayabilir. Ama ben onun gibi / iyi bir şey yerine iyi / kötü bir şey sunacaktı. İkisinin de objektif olarak belirgin avantajları yoktur.
Lee Meador

4
bu artan yuvalama dezavantajı vardır
Dave Cousineau

3

Döngü yalnızca kelimenin tam anlamıyla dönerseniz kırılır false. Ör:

// this is how jquery calls your function
// notice hard comparison (===) against false
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
   break;
}

Bu, hiçbir şey döndürmezseniz geri döndüreceğiniz şey de dahil olmak üzere başka bir şey döndürebileceğiniz anlamına gelir undefined, böylece boş bir iade ifadesi kullanabilirsiniz:

$.each(collection, function (index, item) {
   if (!someTestCondition)
      return; // go to next iteration

   // otherwise do something
});

Bu, sürüme göre değişebilir; bu jquery 1.12.4 için geçerlidir. Eğer fonksiyonun alt dışarı çıktığınızda Ama gerçekten, ayrıca hiçbir şey dönen ve ben hiçbir şey dönen verebilecek hiçbir olasılık olduğunu beklenebilir böylece döngü devam niçin yıllardan bu edilmektedir değil döngü devam eder. Gittikleri döngü tutmak için bir şey dönen başlatmak için herkesi zorlamak istemiyorsanız, hiçbir şey dönen vardır bunu sürdürmek için bir yol olarak.


-3

jQuery.noop () yardımcı olabilir

$(".row").each( function() {
    if (skipIteration) {
        $.noop()
    }
    else{doSomething}
});

Hayır, bu noop () işlevi hiçbir şekilde yardımcı olmaz. Yalnızca "else" bloğu etkinleştirilmediğinden çalışır.
Rauni Lillemets
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.