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

时间:2017-04-13 17:19:53

标签: javascript typescript foreach

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

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

2 个答案:

答案 0 :(得分:5)

幸运的是,我们在TypeScript和ES6中有for..of用于此类场景:

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;
}

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

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

答案 1 :(得分:1)

您可以使用Array#some并退出true

function getMenuIndex(url) {
    let output = -1;
    this.menus.some(app => app.subs.some(sub => {
        if (sub.link === url) {
            output = sub.id;
            return true;
        }
    }));
    return output;
}