JavaScript中的forEach可以回报吗?

han*_*chi 5 javascript arrays foreach

我想知道JavaScript中的forEach是否可以返回,这是我的代码:

var a = [0, 1, 2, 3, 4];

function fn(array) {
  array.forEach(function(item) {
    if (item === 2) return false;
  });

  return true;
}

var ans = fn(a);
console.log(ans); // true
Run Code Online (Sandbox Code Playgroud)

我想知道2是否在我的数组中,如果是,返回false,但似乎forEach函数已经循环整个数组并忽略return.

我想知道我是否能得到我想要的答案forEach(我知道我可以得到我想用的(...))?亲爱的朋友,请帮助我,非常感谢!

pot*_*ngs 6

您可以使用indexOf而不是https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

function fn(array) {
  return (array.indexOf(2) === -1);
}
Run Code Online (Sandbox Code Playgroud)

也可以从forEach的文档中获取 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

注意:除了抛出异常之外,无法停止或中断forEach()循环.如果你需要这样的行为,.forEach()方法是错误的工具,而是使用普通循环.

因此,返回值不能以您使用它的方式使用.但是你可以做一个抛出(除非你真的需要在那里引发错误,否则不建议这样做)

function fn(array) {
  try {
      array.forEach(function(item) {
         if (item === 2) throw "2 found";
      });
  }
  catch (e) {
    return false;
  }

  return true;
}
Run Code Online (Sandbox Code Playgroud)


Poi*_*nty 5

在这种情况下.indexOf(),可能是您想要的,但是也存在.some()简单的相等比较过于简单的情况:

var ans = a.some(function(value) { return value === 2; });
Run Code Online (Sandbox Code Playgroud)

.some()函数返回true如果回调函数返回true的任何元素。(该函数会在回调确实返回时立即返回true,因此它不会在第一个匹配项之外寻找麻烦。)

通常,您可以将.reduce()函数用作更通用的迭代机制。例如,如果要计算2数组中有多少个实例,请执行以下操作:

 var twos = a.reduce(function(c, v) { if (v === 2) c += 1; return c; }, 0);
Run Code Online (Sandbox Code Playgroud)