2016-01-07 14 views
33

キーワード `return`は` forEach`関数の中で何を意味しますか?

$('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>

私の質問:私はreturnを呼び出すが、なぜそれがまだ次の番号に警告していますか?ただ、好き:次のコードを無視し、次の要素を続け

+0

'$( 'button')についてはどうしますか?(function(){})'? – PDKnight

+5

http://stackoverflow.com/questions/2641347/how-to-short-circuit-array-foreach-like-calling-break重複している可能性があります。 –

+0

あなたは 'if(n> = 3){return false'を使用してそれを破ることができます –

答えて

42

MDNから:

注:例外をスローする以外のforEach()ループを停止または中断する方法はありません。このような振る舞いが必要な場合は、.forEach()メソッドが間違ったツールです。代わりにプレーンループを使用してください。述部の配列要素をテストしていて、ブール値の戻り値が必要な場合は、every()またはsome()を代わりに使用できます。

+0

ya。私は 'return false'を' throw 0'に置き換えるべきです。 –

+8

forEachを使用して、反復を止めるためにエラーを起こすことは非常に悪い習慣であり、本当に過度のものです。あなたの場合は、配列のすべての**(forEach ...)を繰り返し実行する必要はありませんが、特定のステートメントが満たされるまで実行する必要があります。単純なループを使用してください( 'while'、' for'、 'for''、do while')。 –

+3

私は@RonenCypisに同意します...そして 'some()'を使うことをお勧めします – squaleLis

8

return終了現在機能をしていますが、ifと警告4をスキップし、「次」の項目を取得するための反復は、上保持します。 ..

あなたはループを停止する必要がある場合は、あなただけそうのようなプレーンなforループを使用する必要があります:JSは&を破るについて

$('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); 
    }) 
}) 

あなたは彼が続けるより多くを読むことができます再:http://www.w3schools.com/js/js_break.asp

+0

申し訳ありません。それは使いすぎです。 –

+0

あなたはどういう意味ですか?私はそれを理解しやすいように書きました...コードはちょっと短縮されるかもしれませんが、あなたが望むものを得ることができます。配列の余分な反復をせずに、ここでいくつかの答えを返します:-) –

+0

配列前。配列の長さ内でループを使いたいとします。あなたは配列要素にアクセスするためのインデックスが必要です.....多くのこと:)それはあなたの例で既に配列を宣言したばかりの –

関連する問題