각 루프에서 jQuery를 벗어나는 방법


677

jQuery each루프에서 벗어나려면 어떻게해야 합니까?

나는 시도했다 :

 return false;

루프에서 그러나 이것은 작동하지 않았습니다. 어떤 아이디어?


11
후손을 위해 : 질문자는 왜 거짓을 돌려주는 것이 효과가 없다고 말했습니까? 거의 모든 대답이 그렇게 말합니다. 각 루프 만 종료하기 때문에 가능했는지 궁금합니다. 반대로 for 루프 내부의 return 문 은 루프 호출 함수를 종료합니다 . 각 루프에서 이러한 과감한 동작을 얻으려면 각 루프 내부에 클로저 범위가있는 플래그를 설정 한 다음 외부 플래그에 응답해야합니다.
Bob Stein 17 년

8
@ BobStein-VisiBone 누군가 내 원래 의견을 삭제했습니다. 나는 return false잘못된 장소에 넣었다 . 내가 고쳤을 때 모든 것이 효과가있었습니다.
Luke101

1
왜 "업데이트" return false가 작동 하지 않는지 확실 하지 않습니다 $().each.
billynoah

2
@ Luke101 당신은 작동하지 않는 것을 명확히하기 위해 질문을 업데이트해야합니다. 질문에 허용 된 답변이 효과가 없다고 말하면이 Q / A는 의미가 없습니다.
xr280xr

답변:


1180

에 또는 루프, 당신은 반환해야 루프 콜백.break$.each$(selector).eachfalse

리턴 true하면 다음 반복 으로 건너 뜁니다 ( continue일반 루프의 경우 와 동일) .

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

// or

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

3
내가 찾던 것, 고마워 @OZZIE, "return true;"를 사용하십시오. 또는 "거짓을 반환하십시오." 귀하의 조건에 따라.
dchayka

2
@CMS는 " false루프 콜백에서 복귀"란 무엇입니까 ? 정확히 어디입니까?
mesqueeb

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

1
jQuery가 자바 스크립트 forEach에서 매개 변수 위치를 바꿔야한다는 것을 모른다.
Mikee

1
@AlexR a에서 벗어나는 $().each것은 똑같은 방식으로 수행되며 편집은 혼란을 유발할뿐입니다.
Jake

57

문서에 따르면 return false;작업을 수행해야합니다.

콜백 함수가 false를 반환하도록하여 $ .each () 루프 [..]를 중단 할 수 있습니다.

콜백에서 false를 반환하십시오.

function callback(indexInArray, valueOfElement) {
  var booleanKeepGoing;

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

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

BTW continue는 다음과 같이 작동합니다.

거짓이 아닌 리턴은 for 루프의 continue 문과 동일합니다. 다음 반복으로 즉시 건너 뜁니다.


35

허용 된 답변이 정확하지 않기 때문에이 질문에 대한 답변을 위해 바이올린을 만들었습니다.이 질문에 대해 Google에서 반환 된 첫 번째 StackOverflow 스레드입니다.

$ .each에서 벗어나려면 사용해야합니다. return false;

그것을 증명하는 바이올린은 다음과 같습니다.

http://jsfiddle.net/9XqRy/


14
나는 바이올린을 좋아하지만 왜 당신이 똑같은 것을 말하고 있기 때문에 왜 대답이 틀렸다고 말하는지 잘 모르겠습니다.
gitsitgo

34

루프를 깨는 조건을 만났지만 .each () 함수 이후의 코드는 여전히 실행되는 상황을 만났습니다. 그런 다음 .each () 함수 다음에 플래그를 즉시 확인하여 플래그를 "true"로 설정하여 뒤 따르는 코드가 실행되지 않았는지 확인합니다.

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

나는 그것의 오래된 질문을 알고 있지만 대답을 보지 못했습니다.

간단한 두 가지 예를 들어 설명하고 싶습니다.

1. 예제 : 이 경우 간단한 반복이 있고 세 개를 찾을 수 있으면 return true로 나누고 싶습니다.

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

이 함수를 호출하면 단순히 true를 반환합니다.

2. 예제이 경우 익명 함수를 매개 변수 로 사용하는 jquery의 각 함수 를 사용하여 반복하려고합니다 .

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.