【问题标题】:Return value for function instead of inner function in Array.forEach [duplicate]Array.forEach 中函数而不是内部函数的返回值 [重复]
【发布时间】:2017-02-13 13:39:52
【问题描述】:

我正在使用此代码来检查某些内容是否有效

function isValid(source, target) {
  arr.forEach(function (el) {
    if (el.value === 3) {
      return false;
    }
  });

  return true;
}

问题在于return false 行代码只会终止forEach 中的内部函数,而不是整个isValid 函数。

如何终止外部函数?

【问题讨论】:

  • 为此使用“普通”for循环不是更容易吗?
  • 使用someevery

标签: javascript arrays foreach return


【解决方案1】:

使用Array#every 来检查元素

function isValid(source, target) {
    return arr.every(function (el) {
        return el.value !== 3;
    });
}

Array#some也一样

function isValid(source, target) {
    return !arr.some(function (el) {
        return el.value === 3;
    });
}

【讨论】:

    【解决方案2】:

    你不能。

    the documentation from MDN:

    除了抛出异常之外,没有其他方法可以停止或中断 forEach() 循环。如果您需要这种行为,则 forEach() 方法是错误的工具,请改用普通循环。如果您正在测试谓词的数组元素并且需要布尔返回值,则可以使用 every() 或 some() 代替。如果可用,新方法 find() 或 findIndex() 也可用于在真谓词上提前终止。

    【讨论】:

      【解决方案3】:

      使用普通的for in 会很好,但使用forEach 你可以这样做:

      function isValid(source, target) {
        var r = true;
        arr.forEach(function (el) {
          if (el.value === 3) {
            r = false;
            return false; // terminate loop
          }
        });
      
        return r;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-07
        • 2016-01-10
        • 1970-01-01
        • 2018-07-09
        • 2011-08-01
        相关资源
        最近更新 更多