如何从forEach返回离开拥抱方法?

Kon*_*ten 3 javascript foreach typescript

我想迭代使用,forEach并且,当找到正确的元素时,返回值.我的印象是一个简单的return内部forEach就足够了,但是我知道调用语句中的结果是undefined.

因此,我必须声明一个输出变量作为整个方法的范围并勾选所有元素,尽管事实上已经找到了正确的元素.(元素是独一无二的.)

getMenuIndex(url) {
  let output = -1;

  this.menus.forEach(app => {
    app.subs.forEach(sub => {
      console.log(sub.link + " vs " + url);
      if (sub.link === url)
        // return sub.id;
        output = sub.id;
    });
  });

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

这是代码味道很长的路.是否有更简洁的方法来选择与URL条件匹配的元素的ID?

Est*_*ask 5

幸运的是,我们for..of在TypeScript和ES6中有这样的场景:

getMenuIndex(url) {
  for (const app of this.menus) {
    for (const sub of app.subs) {
      console.log(sub.link + " vs " + url);
      if (sub.link === url)
        return sub.id;
    }
  }

  return -1;
}
Run Code Online (Sandbox Code Playgroud)

forEach有明显限制的情况下,例如await/ yieldreturn/ ,它非常有用break.

正如其他答案所说,有一些数组方法可以更好地适应这种情况.虽然TypeScript ES5目标for..of被定制为常规for,因此本身是最快的解决方案.