web-dev-qa-db-ja.com

jQuery.each()utilの次の繰り返しにスキップするにはどうすればいいですか?

私は要素の配列を反復処理しようとしています。 jQueryのドキュメントは言う:

jquery.Each()のドキュメント

False以外の値を返すことはforループのcontinueステートメントと同じです。次の繰り返しにすぐにスキップします。

私は「return non-false」と呼んでみました。 「偽ではない」どちらも次の繰り返しにスキップしません。代わりに、彼らはループを破ります。何が足りないの?

419
Josh

彼らが非偽であるということは、

return true;

だから、このコード:

var arr = [ "one", "two", "three", "four", "five" ];
$.each(arr, function(i) {
    if(arr[i] == 'three') {
        return true;
    }
    alert(arr[i]);
});

1、2、4、5に警告します

765

'false以外を返す'とは、うまくいかない値を返すことを意味します。それで、あなたはtrue1'non-false'、またはあなたが考えることができる他の何でも返すことができます。

60
tj111

Javascriptのようなものは、「真実性」と「虚偽」の考えを持っています。変数に値がある場合、一般的には9になりますが、それは「真実性」を持ちます。つまり、値がない場合は「虚偽」になります。以下のスニペットは役に立つかもしれません:

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

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

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

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

うまくいけば、それは役立ちますか?

また、Douglas Crockfordからこれらのビデオをチェックしてみる価値があります

更新:壊れたリンクを発見してくれてありがとう@cphpython - 私は今、作業バージョンを指すように更新しました

Javascript言語

Javascript - 良い部分

5
mlennox

次の繰り返しにたどり着くためにブロックの端から落ちることができることを忘れないでください。

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

実際にこのように戻るのではなく、

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

あなたが文字通りfalseを返すと、ループのみが壊れます。例:

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

これはundefinedを含め、他に何でも返すことができることを意味します。これは、何も返さない場合に返されるものなので、空のreturnステートメントを使用することができます。

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

   // otherwise do something
});

これはバージョンによって異なる可能性があります。これはjquery 1.12.4に適用されます。しかし、実際には、関数の下部を終了すると、何も返されないため、ループが続行されます。そのため、何も返さない可能性はまったくないと予想されますループを続けます。誰もがループを続けるために何かを返すことを強制したくないのであれば、何も返さないことを続けるにはがあることを意味します。

2
Dave Cousineau