【问题标题】:"Return" out of Function, If Statement Inside Lodash forEach()“返回”函数,Lodash forEach() 中的 If 语句
【发布时间】:2016-01-23 12:37:04
【问题描述】:
function(){
    _.forEach(listOfSomething, function (something) {
      if(someCondition){
        return false
      }
    });
    return true;
}

看起来很简单 - 尝试检查每个项目的某些条件,如果没有满足任何项目退出功能并返回 false。当循环完成而不退出时,返回true。

始终返回 true,尝试过控制台日志记录,并且确实达到了“返回 false”点。

我是否遗漏了一些关于 js 工作原理的明显内容,或者这是一个 lodash 的事情?

【问题讨论】:

  • 这里有两个功能。 forEach 语句中的“return false”会影响内部函数而不是外部函数。

标签: javascript lodash


【解决方案1】:

快速浏览一下,“return”只会从内部函数返回 false,该函数对列表的每个元素执行一次(通过 forEach),而不是退出外部函数

事实上,我认为 forEach 会继续执行(不确定它的语义,也许它会从它调用的函数中寻找“假”结果来打破循环)

但是在forEach之前设置一个叫result的变量为true,在if中设置为false,那么最后有一个返回结果

应该可以,但是您应该检查有关该 forEach 的文档,以查看是否确实执行“return false”会破坏循环,或者是否有一些 break 或类似的命令来执行此操作(可能是 _.break();但我不确定那个“_”实例是什么)

【讨论】:

  • "_" 就是 lodash,一个类似于 underscore js 的库,提供了处理数组的方法。
  • 感谢您的提示,以前没听说过。事实上,与其他答案点一样,_.some 应该可以解决问题。
【解决方案2】:

那是因为有两个函数,第二个函数的返回不会使第一个函数返回。您应该将变量设置为 true,如果满足条件,则将其更改为 false:

function(){
    var condition = true;
    _.forEach(listOfSomething, function (something) {
      if(someCondition){
        condition = false;
        return;
      }
    });
    return condition;
}

【讨论】:

  • 谢谢,我想我确实错过了 forEach() 在这里是“_”对象的方法这一事实。菜鸟会菜鸟。
  • 问题是你也想打破我所理解的循环,我不确定你正在做的 return false 是否会破坏 forEach (必须检查它的文档)
  • 我确实想跳出循环,但似乎 lodash 不支持 forEach 中的任何“break”语句(或 for 循环中的 javascript,仅在 switch 语句中)。
  • 而且他们也不提供 goto #LOL(猜你已经用 _.some 找到了解决方案)
  • “返回;”您在此处添加的功能类似于“继续”;在常规循环中,因此在这种情况下完全错误,它对循环的长度绝对没有影响。你应该使用“return false;”而是。
【解决方案3】:

您缺少的是您的 return false 语句与您的 return true 语句位于不同的函数中。您可能想要使用不同的 lodash 方法,例如 any/some

function(){
    return _.some(listOfSomething, function (something) {
      return someCondition;
    });
}

【讨论】:

  • 啊,我想念的常识,谢谢,定时器到期时会接受答案。
  • "检查谓词是否为集合的任何元素返回真值。该函数在找到传递值后立即返回,并且不会遍历整个集合。" lodash.com/docs#some
  • 现在,_.forEach() 在返回 false 时也会中断;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
相关资源
最近更新 更多