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

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

jquery.Each () 문서

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

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



답변

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

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.


답변

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


답변

자바 스크립트에는 ‘진실성’과 ‘거짓’이라는 개념이 있습니다. 변수에 값이 있으면 일반적으로 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-작동중인 버전을 가리 키도록 업데이트했습니다

자바 스크립트 언어

자바 스크립트-좋은 부분


답변

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

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

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

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


답변

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


답변

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

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


답변