【问题标题】:TypeScript foreach return [duplicate]TypeScript foreach 返回 [重复]
【发布时间】:2019-01-23 05:05:00
【问题描述】:

我想知道是否有更好的方法来执行此操作 - 看起来从 foreach 返回并没有从包含 foreach 循环的函数中返回,这可能是 C# 开发人员的期望。

只是想知道是否有更清洁的方法:

example() {
    var forEachReturned;

    this.items.forEach(item => {
        if (true) {
            forEachReturned = true;
            return;
        }
    });

    if (forEachReturned) {
        return;
    }

    // Do stuff in case forEach has not returned
}

【问题讨论】:

  • 被 Linq 和 Lambdas 宠坏了... ;)
  • 仅供参考 C#/.NET 的 List<T>.ForEach() 的行为方式与您在此处看到的完全相同。 JavaScript 的 Array#forEach 与 C# 的 foreach 循环不太相似——一个是方法,另一个是控制结构。

标签: javascript c# typescript


【解决方案1】:

更简洁的方法是不使用.forEach。如果您使用的是 TypeScript 或现代版本的 JavaScript,则几乎不需要它:

example() {
    for (let item of this.items) {
        if (item === 3) {
            return;
        }
    }      

    // Do stuff in case forEach has not returned
}

如果循环中的代码没有任何副作用,并且您只是检查每个项目的条件,您还可以使用 .some 的函数式方法:

example() {
    if (this.items.some(item => item === 3)) {
        return;
    }

    // Do stuff in case we have not returned
}

【讨论】:

  • 太好了,谢谢!! 'for' 而不是 'foreach' 数组的一个副作用是,在 Angular 6 和 TypeScript 2.9.2 中,似乎在 某些 条件下,使用 'for' 循环导致当前数组中的对象未定义,而 .forEach() 不会出现该问题。有什么想法吗?
  • @Ross 我能想到的唯一情况是在稀疏数组的情况下,例如let arr = [1,2,3,,,4,5,6]forEach 和其他数组原型方法(mapfilter)将跳过空条目,但 for..of 不会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 2022-11-11
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 2022-07-21
  • 2016-08-12
相关资源
最近更新 更多