【问题标题】:How can i break a for in loop from nested forEach Function in Javascript?如何从 Javascript 中的嵌套 forEach 函数中打破 for in 循环?
【发布时间】:2020-10-20 13:03:17
【问题描述】:

我有一个 this 循环

for (var key in params) {
  if (Array.isArray(params[key])) {
    params[key].every(function(item) {
      let value = something(item.start, item.end);
      if (value === item.start || value == item.end) {
        return false // break
      }
    })
  }
}

当我将return false 设置为停止every() 函数时,我还想停止第一个循环。我怎样才能做到这一点?我试过这个:

OUTER_LOOP: for (var key in params) {
  if (Array.isArray(params[key])) {
    params[key].every(function(item) {
      let value = something(item.start, item.end);
      if (value === item.start || value == item.end) {
        return false // break
        break OUTER_LOOP; // not working
      }
    })
  }
}

但它不能以这种方式工作......那么我怎样才能正确地同时停止every() 函数和第一个循环?

【问题讨论】:

  • 能分享一下param的内容吗

标签: javascript for-loop foreach break


【解决方案1】:

您可以使用Array#some 并返回true 以退出some,并使用some 的返回值来打破循环。

for (var key in params) {
    if (Array.isArray(params[key])) {
        const
            leave = params[key].some(item => {
                let value = something(item.start, item.end);

                // exit condition should return true/truthy value
                // for leaving the outer loop
                return value === item.start || value == item.end;
            });

        if (leave) break;
    }
}

【讨论】:

  • 谢谢,但return true 不会停止for (var key in params) 循环
  • 是的,请参阅编辑。结果需要用支票在外面冒泡。
  • 谢谢,我再次更新了我的代码,因为我忘记了一些东西......它仍然适用于some()吗?你能再看看吗?
  • 感谢您的更新。但我有一个问题。 something() 返回例如像0.99 这样的浮点值,如果item.end1,那么循环在1 之前结束,所以在我的console.log() 中我看到它以0.99 而不是1 结尾。我该如何更改if条件,所以我也可以看到 1 一次然后循环中断?还是我需要在return value 之前传递我的其他东西?
  • 你可以四舍五入...?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
相关资源
最近更新 更多