Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何突破.each()并为函数返回值_Javascript_Jquery - Fatal编程技术网

Javascript 如何突破.each()并为函数返回值

Javascript 如何突破.each()并为函数返回值,javascript,jquery,Javascript,Jquery,我想使用return false来中断.each(),但同时也返回一个值。我该怎么做 请参考变通功能,了解我正在尝试执行的操作: function HasStores(state) { var statehasstores = false; $(stores).each(function (index, store) { if (state == store.state && store.category == "meyers") {

我想使用
return false
来中断.each(),但同时也返回一个值。我该怎么做

请参考变通功能,了解我正在尝试执行的操作:

function HasStores(state) {
    var statehasstores = false;

    $(stores).each(function (index, store) {
        if (state == store.state && store.category == "meyers") {
            statehasstores = true;
            return false;  // break
        }
    });

    return statehasstores;
}
Id在伪代码中要做的是:

Function () {
    for() {
        if found {
            return true;
        }   
    }
    return false;
}

你所建议的是做这件事的方法。我不认为它是一种变通方法,而更认为它是一种习惯用法。

你做得对

引自


“我们可以通过返回false从回调函数中停止循环。”

或者,您可以使用
for
循环而不是
each()
,只返回值。

使用循环外的变量获取值,然后使用它

var value;

$(stores).each(function (index, store) {
    if(state == store.state && store.category == "meyers"){
        statehasstores = true;
        value = store; // added line
        return false; //break
    }
});

alert(value);
你这样做很好

这对你没用?你能展示更多的背景吗

    • 要有创意:

      try {
        $(stores).each(function (index, store) {
          if(state == store.state && store.category == "meyers"){
            throw store;
          }
        });
      }
      catch(e) {
        // you got e with the value
      }
      

      不,我只是开玩笑,不要用这个:)。这是我喜欢分享的一个想法

      好吧,我想这一点有点疑问,所以我想在这里说得更清楚一些:

      • 当jquerydoc说:“我们可以通过返回false来停止回调函数中的循环。”您可以:

        函数(){ for(){ 如果找到{ 返回true; }
        } 返回false; }

      这并不意味着您的函数在查找搜索的元素时将返回true。相反,它将始终返回false

      因此,为了使您的功能按您的意愿运行,我建议:

      Function () {
         variable found = false;
      foreach() {
          if found {
              found = true;
              return false; // This statement doesn't make your function return false but just cut the loop
          }   
      }
      return found;
      
      }

      当然还有很多其他的方法来实现这一点,但我认为这是最简单的方法

      库帕-轻松

      正如其他人从中注意到的,返回false只会中断循环,而不会返回值,但是返回true将“继续”并立即开始下一次迭代。有了这些知识,您可以在某种程度上简化代码,如下所示:

      function HasStores(state) {
        var statehasstores = false;
      
        $(stores).each(function (index, store){
      
          // continue or break;
          statehasstores = !(state == store.state && store.category == "meyers"))
          return statehasstores;
        });
      
        return !statehasstores;
      }
      
      当然,使用双重否定有点愚蠢,并且有副作用,每次错误迭代都会将“true”保存到statehastores,反之亦然,但是最终结果应该是相同的,并且不再有if语句。

      怎么样:

      $.each( myObj, function( key, value ){
        ...
        if( sthg... ){
          myObj.somethingWentHorriblyWrong = true;
          return false;
        }
      });
      
      if( myObj.somethingWentHorriblyWrong ){
        // ... do something, not forgetting to go:
        delete myObj.somethingWentHorriblyWrong;
      }
      
      PS我最初对
      $的内容感兴趣。每个(…
      实际返回。正如它在上所说的,“方法返回其第一个参数,即迭代的对象”,但实际上解决方案甚至不要求您使用该事实


      PPS需要一个返回值的函数?当然是一个外部函数。

      它已经在这样做了!看我的例子,这是第一个,所以我在问题OP中找到了我想要的答案,问了lolI,我对此感到很抱歉……但我真的很喜欢创造性思维^^我不记得什么是“正统的”目前JS中的观点是将异常作为常规代码技术来使用。某些语言的“大师”在某些时候也涉足过这个想法……但对我来说,作为一个傻瓜,我倾向于认为“异常情况下的异常”,或者“当代码对某件事情产生异常时,抛出异常”。其中一个,嗯,例外可能是备选方案太复杂。但这里不是这样。避免使用这种例外的一个实际原因是,你不知道处理它们所涉及的开销。这并不能回答问题。他还想在返回false后返回一个值,即区分
      return false
      从简单地终止循环开始。@Ariel怎么样?如果满足条件(就像OP的伪代码命令),返回值是
      true
      ,并且它打破了循环。@cimevidas(JS,而不是JQ,
      some
      方法)是完全不相关的。我很惊讶这个答案有36(!)向上投票并保留接受的答案(因为OP可以更改)。请查看我的答案。@我不理解您的答案。据我所见,OP需要一个函数来检查jQuery集合是否包含具有给定<代码>状态值的元素。