jQueryの各ループから抜け出す方法


674

jQuery eachループから抜け出すにはどうすればよいですか?

私が試してみました:

 return false;

ループではこれは機能しませんでした。何か案は?


10
後世のために:なぜ質問者は偽を返すことがうまくいかないと言ったのですか?事実上すべての答えはそうするように言っています。それがたぶん各ループを終了させるだけのせいかどうか疑問に思いました。対照的に、forループ内のreturnステートメントは、ループ呼び出し元の関数終了します。各ループからこのような抜本的な動作を実現するには、各ループ内にクロージャースコープでフラグを設定し、その外側のフラグに応答する必要があります。
ボブスタイン

7
@ BobStein-VisiBone誰かが私の元のコメントを削除しました。私が入れreturn false間違った場所に。私がそれを修正したとき、すべてがうまくいきました。
Luke101

1
「アップデート」でreturn false動作しない理由がわかりません$().each- 動作するため。
ビリーノア2018年

2
@ Luke101あなたは何がうまくいかなかったかを明確にするために質問を更新するべきです。このQ / Aは、あなたの質問が承認された回答が機能しないと言っている場合には意味がありません。
xr280xr

回答:


1176

またはループ、あなたは返す必要がループコールバックで。break$.each$(selector).eachfalse

戻るtrueと、次の反復にスキップしcontinueます。これは、通常のループのaと同等です。

$.each(array, function(key, value) { 
    if(value === "foo") {
        return false; // breaks
    }
});

// or

$(selector).each(function() {
  if (condition) {
    return false;
  }
});

3
ちょうど私が探していたもの、ありがとう。@OZZIE、「return true;」を使用してください。または「falseを返す」。あなたの条件に基づいて。
dchayka 2014年

2
@CMSは「falseループコールバックでの戻り」とはどういう意味ですか?これは正確にはどこですか?
mesqueeb

$.each(array, function(key, value) { if(value == "foo") return false; });
SteveEdson

1
jQueryがJavaScriptのforEachからパラメーターの位置を交換しなければならなかったことを知らない。
Mikee 2018年

1
@AlexRブレイクアウトは$().eachまったく同じ方法で行われ、編集は混乱を招くだけです。
ジェイク

57

ドキュメントによると、return false;仕事をする必要があります。

$ .each()ループ[..]を中断するには、コールバック関数をfalseに戻します。

コールバックでfalseを返します。

function callback(indexInArray, valueOfElement) {
  var booleanKeepGoing;

  this; // == valueOfElement (casted to Object)

  return booleanKeepGoing; // optional, unless false 
                           // and want to stop looping
}

ところで、continueこのように動作します:

false以外を返すことは、forループのcontinueステートメントと同じです。すぐに次の反復にスキップします。


35

受け入れられた回答が正しくないため、この質問に対する回答のフィドルを作成しました。これは、この質問に関してGoogleから返された最初のStackOverflowスレッドです。

$ .eachから抜け出すには、使用する必要があります return false;

ここにそれを証明するフィドルがあります:

http://jsfiddle.net/9XqRy/


14
私はフィドルが好きですが、あなたが両方とも同じことを言っているので、なぜあなたが受け入れられた答えが間違っていると言うのかわかりません。
gitsitgo 14

34

ループを壊す条件に出会ったが、.each()関数の後のコードはまだ実行されているという状況に遭遇しました。次に、フラグを "true"に設定し、.each()関数の直後にフラグをチェックして、後続のコードが実行されなかったことを確認します。

$('.groupName').each(function() {
    if($(this).text() == groupname){
        alert('This group already exists');
        breakOut = true;
        return false;
    }
});
if(breakOut) {
    breakOut = false;
    return false;
} 

7

「各」はコールバック関数を使用します。コールバック関数は、呼び出し関数に関係なく実行されるため、コールバック関数から呼び出し関数に戻ることはできません。

ある条件に基づいてループの実行を停止し、同じ関数にとどまる必要がある場合は、forループを使用します。


6

私はかなり古い質問を知っていますが、何も答えが見つからなかったので、なぜ、いつリターンで中断できるのかがわかります。

私はそれを2つの簡単な例で説明したいと思います:

1.例: この場合、単純な反復があり、3つが見つかればreturn trueで中断したいとします。

function canFindThree() {
    for(var i = 0; i < 5; i++) {
        if(i === 3) {
           return true;
        }
    }
}

この関数を呼び出すと、単にtrueが返されます。

2.例 この例では、匿名関数をパラメーターとして取るjqueryのeach functionを反復処理します。

function canFindThree() {

    var result = false;

    $.each([1, 2, 3, 4, 5], function(key, value) { 
        if(value === 3) {
            result = true;
            return false; //This will only exit the anonymous function and stop the iteration immediatelly.
        }
    });

    return result; //This will exit the function with return true;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.