函数在jQuery每个循环的中间返回不正确的值

时间:2017-11-12 15:35:23

标签: javascript jquery

我想在jQuery Each循环中立即返回奇怪的行为,我的期望是,下面的函数应该返回TRUE(条件匹配)。但我仍然变得虚假。这可以在Java中工作,但在JS / jQuery中不起作用吗?

function returnFromLoop(eventIDs) {

   jQuery.each(eventIDs, function(index, item) {
       if (item.indexOf("TEST") != -1) {
           return true;
       }
   
   });
   return false;
}

var eventIDs = [];
eventIDs.push('abc');
eventIDs.push('defTEST');
eventIDs.push('ghi');

var result = returnFromLoop(eventIDs);
console.log('result = ' + result);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

2 个答案:

答案 0 :(得分:1)

jQuery的let transition = CATransition() transition.duration = 0.4 transition.type = kCATransitionPush transition.subtype = kCATransitionFromRight self.navigationController?.view.layer.add(transition, forKey: kCATransition) self.navigationController?.popViewController(animated: false) 方法中的return true不会突破循环。相反,您可以使用.each()来摆脱循环。

然后,为了捕获返回值,您可以使用变量。在下面的代码段中,我使用了变量return false。一旦退出循环,就可以返回该变量。

来自http://api.jquery.com/jQuery.each/

  

我们可以通过使回调函数返回false来在特定迭代中中断$ .each()循环。返回非false与for循环中的continue语句相同;它将立即跳到下一次迭代。

returnValue
function returnFromLoop(eventIDs) {
  var returnValue = false;
  jQuery.each(eventIDs, function(index, item) {
    if (item.indexOf("TEST") != -1) {
      returnValue = true;
      return false; // Equivalent to break statement.
    }
  });
  return returnValue;
}

var eventIDs = [];
eventIDs.push('abc');
eventIDs.push('defTEST');
eventIDs.push('ghi');

var result = returnFromLoop(eventIDs);
console.log('result = ' + result);

答案 1 :(得分:1)

问题是你试图返回两个函数,所以我使用了一个额外的变量来解决。 return true充当继续类型,因此您需要返回false。 https://stackoverflow.com/a/8224424/6517383将帮助您了解更多信息。

function returnFromLoop(eventIDs) {
   var state = 0;
   jQuery.each(eventIDs, function(index, item) {
       if (item.indexOf("TEST") != -1) {
            state = 1;
            return 1;
       }
   });
   if(state == 1) {
      return true;
   }
   return false;
}

var eventIDs = [];
eventIDs.push('abc');
eventIDs.push('defTEST');
eventIDs.push('ghi');

var result = returnFromLoop(eventIDs);
console.log('result = ' + result);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>