2016-01-07 18 views
33

`return` anahtar kelimesi` forEach` işlevinin içinde ne anlama gelir?

$('button').click(function() { 
 
    [1, 2, 3, 4, 5].forEach(function (n) { 
 
     if (n == 3) { 
 
     // it should break out here and doesn't alert anything after 
 
     return false 
 
     } 
 
     alert(n)  
 
    }) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button>Click me</button>

Benim sorum: ben return diyoruz rağmen neden uyarı sonraki sayısı hala çalışır? Tıpkı: aşağıdaki kodu yok sayın ve sonraki eleman ile devam

+0

"$ ('button'). Click (function() {})' nedir? – PDKnight

+5

http://stackoverflow.com/questions/2641347/how-to-short-circuit-array-foreach-like-calling-break Olası kopya. –

+0

'if (n> = 3) {return false' –

cevap

42

MDN Gönderen:

Not: durdurmak ya da bir istisna atarak dışında bir forEach() döngü kırmaya bir yolu yoktur. Böyle bir davranışa ihtiyacınız varsa, .forEach() yöntemi yanlış bir araçtır, bunun yerine düz bir döngü kullanın. Bir yüklem için dizi öğelerini test ediyorsanız ve bir boole dönüş değeri gerekiyorsa, bunun yerine her bir() veya bazı() kullanabilirsiniz.

+0

ya. 'Return false' yerine '0' atmalıyım. –

+8

Bağlantı için teşekkürler forEach' ve yinelemeyi durdurmak için bir hata atmak çok kötü bir uygulamadır ve gerçek bir aşırı sıkmadır. Sizin durumunuzda ** dizisini (**) tüm ** 'i tekrarlamak istemezsiniz, ancak belirli bir ifade yerine gelene kadar koşmak istersiniz. Bunun için basit bir döngü kullanmalısınız ('while',' for', 'in',' while while' için). –

+3

@RonenCypis ile aynı fikirdeyim. – squaleLis

8

return çıkar akım fonksiyonu, ancak if ve uyarıları 4 atlar "sonraki" öğesini olsun böylece yineleme, devam ediyor. ..

Eğer döngü durdurmak gerekiyorsa, sadece bu yüzden gibi bir düz for döngü kullanmalısınız: js & kırmak yaklaşık

$('button').click(function() { 
    var arr = [1, 2, 3, 4, 5]; 
    for(var i = 0; i < arr.length; i++) { 
    var n = arr[i]; 
    if (n == 3) { 
     break; 
     } 
     alert(n); 
    }) 
}) 

sen devam okuyabilirsiniz re: http://www.w3schools.com/js/js_break.asp

+0

Üzgünüz. Kullanması çok uzun. –

+0

Ne demek istiyorsun ??? Anlayış kolaylığı için böyle yazdım ... Kod biraz kısaltılabilirdi, ama tam olarak istediğin şeyi alır, dizinin diğer tekrarları gibi bir dizi başka cevap vermeden :-) –

+0

Dizinin bildirilmesi gerekiyor önce. Dizi uzunluğu içinde bir döngü kullanmak istersiniz. Dizi elemanına erişmek için bir diziye ihtiyacınız var ..... Pek çok şey :) Bu, örneğinizdeki diziyi zaten bildirmiş olduğunuz –

İlgili konular