source

Jquery each - 루프를 중지하고 개체를 반환합니다.

manysource 2023. 10. 22. 20:10

Jquery each - 루프를 중지하고 개체를 반환합니다.

누가 나에게 왜 루프가 멈추지 않았는지 말해줄 수 있습니까?5입장?

http://jsbin.com/ucuqot/edit#preview


$(document).ready(function()
{
  someArray = new Array();
  someArray[0] = 't5';
  someArray[1] = 'z12';
  someArray[2] = 'b88';
  someArray[3] = 's55';
  someArray[4] = 'e51';
  someArray[5] = 'o322';
  someArray[6] = 'i22';
  someArray[7] = 'k954';  

  var test =  findXX('o322');   

});

function findXX(word)
{  
  $.each(someArray, function(i)
  {
    $('body').append('-> '+i+'<br />');
    if(someArray[i] == 'someArray')
    {
      return someArray[i]; //<--- did not stop the loop!
    }   
  });  
}

왜냐하면 당신이 a를 사용할 때return안에 있는 진술eachloop, "비 false" 값은 다음과 같이 작용합니다.continue,반면에.false의 역할을 할 것입니다.break. 반환해야 합니다.false로부터each기능.이와 같은 것:

function findXX(word) {
    var toReturn; 
    $.each(someArray, function(i) {
        $('body').append('-> '+i+'<br />');
        if(someArray[i] == word) {
            toReturn = someArray[i];
            return false;
        }   
    }); 
    return toReturn; 
}

문서에서:

콜백 함수를 거짓으로 만들어서 특정 반복에서 $.each() 루프를 깰 수 있습니다.거짓이 아닌 것을 반환하는 것은 for 루프의 continue 문과 동일합니다. 다음 반복으로 즉시 건너뜁니다.

수정된$.each기능.

$.fn.eachReturn = function(arr, callback) {
   var result = null;
   $.each(arr, function(index, value){
       var test = callback(index, value);
       if (test) {
           result = test;
           return false;
       }
   });
   return result ;
}

false/공백이 아닌 결과에 대한 루프를 차단하고 반환하므로, 사용자의 경우 다음과 같습니다.

return $.eachReturn(someArray, function(i){
    ...

여기:

http://jsbin.com/ucuqot/3/edit

function findXX(word)
{  
  $.each(someArray, function(i,n)
  {
    $('body').append('-> '+i+'<br />');
    if(n == word)
    {
      return false;
    }   
  });  
}

이거 해보세요...

  someArray = new Array();
  someArray[0] = 't5';
  someArray[1] = 'z12';
  someArray[2] = 'b88';
  someArray[3] = 's55';
  someArray[4] = 'e51';
  someArray[5] = 'o322';
  someArray[6] = 'i22';
  someArray[7] = 'k954';  

  var test =  findXX('o322'); 
  console.log(test);



function findXX(word)
{  
  for(var i in someArray){


    if(someArray[i] == word)
    {
      return someArray[i]; //<---  stop the loop!
    }   
  }
}

"우리는 콜백 함수를 거짓으로 만들어서 특정 반복에서 $.each() 루프를 깰 수 있습니다.거짓이 아닌 것을 반환하는 것은 for 루프의 continue 문과 같습니다. 다음 반복으로 즉시 건너뜁니다."

http://api.jquery.com/jquery.each/ 에서

네, 오래된 얘기지만 질문에 답을 드리자면 좀 더 간단할 수 있습니다.

function findXX(word) {
  $.each(someArray, function(index, value) {
    $('body').append('-> ' + index + ":" + value + '<br />');
    return !(value == word);
  });
}
$(function() {
  someArray = new Array();
  someArray[0] = 't5';
  someArray[1] = 'z12';
  someArray[2] = 'b88';
  someArray[3] = 's55';
  someArray[4] = 'e51';
  someArray[5] = 'o322';
  someArray[6] = 'i22';
  someArray[7] = 'k954';
  findXX('o322');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

댓글을 통해 좀 더 많은 정보:

function findXX(myA, word) {
  let br = '<br />';//create once
  let myHolder = $("<div />");//get a holder to not hit DOM a lot
  let found = false;//default return
  $.each(myA, function(index, value) {
    found = (value == word);
    myHolder.append('-> ' + index + ":" + value + br);
    return !found;
  });
  $('body').append(myHolder.html());// hit DOM once
  return found;
}
$(function() {
  // no horrid global array, easier array setup;
  let someArray = ['t5', 'z12', 'b88', 's55', 'e51', 'o322', 'i22', 'k954'];
  // pass the array and the value we want to find, return back a value
  let test = findXX(someArray, 'o322');
  $('body').append("<div>Found:" + test + "</div>");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

참고: 배열.includes()여기 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes 에 어울리는 것이 좋을 것 같습니다.

아니면 그냥.find()https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find 에 접속할 수 있습니다.

깃발을 세우는 것보다 자바스크립트의 것을 사용하는 것이 더 우아할 수 있습니다.Array.prototype.find배열에서 일치하는 항목을 찾습니다.루프는 콜백에서 truthy 값이 반환되는 즉시 종료되며, 해당 반복 동안 배열 값은.find호출의 반환 값:

function findXX(word) {
    return someArray.find((item, i) => {
        $('body').append('-> '+i+'<br />');
        return item === word;
    }); 
}

const someArray = new Array();
someArray[0] = 't5';
someArray[1] = 'z12';
someArray[2] = 'b88';
someArray[3] = 's55';
someArray[4] = 'e51';
someArray[5] = 'o322';
someArray[6] = 'i22';
someArray[7] = 'k954';

var test = findXX('o322');
console.log('found word:', test);

function findXX(word) {
  return someArray.find((item, i) => {
    $('body').append('-> ' + i + '<br />');
    return item === word;
  });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

언급URL : https://stackoverflow.com/questions/8224375/jquery-each-stop-loop-and-return-object