jQuery.each () 유틸리티에서 다음 반복으로 건너 뛰는 방법?


434

요소 배열을 반복하려고합니다. jQuery의 설명서는 다음과 같이 말합니다.

jquery.Each () 문서

false가 아닌 것을 리턴하는 것은 for 루프의 continue 문과 동일하며 다음 반복으로 즉시 건너 뜁니다.

나는 '거짓이 아닌 반환'을 부르려고 노력했다. 그리고 '거짓이 아닙니다.' 다음 반복으로 건너 뛰지 않습니다. 대신, 그들은 루프를 끊습니다. 내가 무엇을 놓치고 있습니까?


9
자신의 무한한 지혜에서, jQuery를에 bods 이제 문서에서이 메모를 삭제 한 - 또는 적어도, 그것은에없는 각 페이지 () . 그래서 나는이 질문이 여전히 여기에서 발견 될 수있어서 매우 기쁘다. 구글에서 확장 된 것은 이것이 내가 항상 잊어 버린 단순한 것들 중 하나이기 때문이다.)
Doug McLean

답변:


783

그들이 거짓이 아닌 것은 다음과 같습니다.

return true;

따라서이 코드 :

var arr = ["one", "two", "three", "four", "five"];
$.each(arr, function(i) {
  if (arr[i] == 'three') {
    return true;
  }
  console.log(arr[i]);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

기록합니다 one, two, four, five.


16
현재 반복 만 종료하려면 'return'을 반환하는 것으로 충분합니다. 그리고 모든 반복을 종료하려면 false를 반환하십시오.
Saulius

7
이 코드가 실행될 때 함수 내에 있기 때문에 이것이 효과가 있다고 말할 가치가 있습니다.
Ukuser32

내가 돌아올 때 (arr [i] === 'three'); 왜 작동하지 않습니까?
ajayv

나에게 거짓이 아닌 것을 의미한다면, 당신은 거짓을 반환하는 것 외에는 아무것도 반환 할 수 없습니다.
Hoang Trung

61

'false non-false'는 거짓을 부울 처리하지 않는 값을 반환하는 것을 의미합니다. 당신은 반환 할 수 있도록 true, 1, 'non-false', 또는 어떤 다른 당신은 최대 생각할 수 있습니다.


20
왜 명시적인 목적으로 "return 'continue";
Alexander Mills

계속 어떻습니까? 나는 C 샤프의 변형에서 효과가 있었기 때문에 JS에서도 비슷한 효과가있을 것이라고 추측합니다.
Brandito

@Brandito 정상적인 루프처럼 실행되지 않습니다-함수를 재귀 적으로 호출하므로 루프를 계속하려면 함수 내부에서 처리를 종료해야합니다.
TJ L

5

자바 스크립트에는 '진실성'과 '거짓'이라는 개념이 있습니다. 변수에 값이 있으면 일반적으로 9에서 볼 수 있듯이) 'truthiness'-null이거나 값이 'falsiness'인 경향이 없습니다. 아래 스 니펫이 도움이 될 수 있습니다.

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-작동중인 버전을 가리 키도록 업데이트했습니다

자바 스크립트 언어

자바 스크립트-좋은 부분


1
연결이 끊어졌습니다 ... Btw 0는 또한 잘못된 값이며 그 부정은 진실합니다 (예 : 다른 숫자와 반대 !-42 === false).
CPHPython

4

때때로 다음 반복에 도달하기 위해 블록의 끝에서 떨어질 수 있음을 잊지 마십시오.

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

실제로 다음과 같이 돌아 오는 대신 :

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

3
나는 무례하다는 것을 의미하지는 않지만 이것은 끔찍한 디자인입니다. 내 말은 .. 내가 2 년 동안 대학을 다니면서 더 잘 몰랐을 때 (
그런데도 마음에 들지 않았지만) 해봤지만 조언

@ DanielParejoMuñoz, 들리지만, 우리는 동의하지 않습니다. 반환 진술을하지 않는 선택은 당신이 좋아하지 않을 수 있습니다. 그러나 나는 그 좋은 / 나쁜 것보다는 비슷한 / 싫은 것을 제출할 것입니다. 어느 쪽도 객관적인 이점이 없습니다.
Lee Meador

4
중첩 증가의 단점이 있습니다
Dave Cousineau

3

루프는 단지 당신이 말 그대로 반환하면 나누기 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에 적용됩니다. 그러나 실제로 함수의 맨 아래를 나가면 아무것도 반환하지 않으므로 루프가 계속되는 이유이므로 아무것도 반환하지 않으면 루프를 계속할 수 없습니다 . 모든 사람들이 루프를 유지하기 위해 무언가를 반환하도록 강요하지 않는 한, 아무것도 반환하지 않으면 루프를 계속 유지할 수있는 방법 아니 어야합니다.


-3

jQuery.noop () 이 도울 수 있습니다

$(".row").each( function() {
    if (skipIteration) {
        $.noop()
    }
    else{doSomething}
});

아니요,이 noop () 함수는 어떤 식 으로든 도움이되지 않습니다. "else"블록이 활성화되지 않았기 때문에 작동합니다.
Rauni Lillemets
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.