函数的返回值而不是Array.forEach中的内部函数

时间:2016-10-05 07:56:49

标签: javascript arrays foreach return

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

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

  return true;
}

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

如何终止外部功能?

3 个答案:

答案 0 :(得分:2)

使用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;
    });
}

答案 1 :(得分:1)

你不能。

请参阅the documentation from MDN

  

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

答案 2 :(得分:0)

使用常规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;
}