ES6类方法没有返回forEach循环内的任何内容

时间:2016-09-22 17:31:35

标签: javascript function return ecmascript-6 arrow-functions

由于某些原因,getTwo()中的方法PollClass不会返回2而是undefined。如果我将return语句放在.forEach()循环之外,则会返回一个值。

class Poll {
  constructor(name) {
    this.name = name;
    this.nums = [1, 2, 3];
  }

  getTwo() {
    this.nums.forEach(num => {
      if (num === 2) return num;
    })
  }
}

const newPoll = new Poll('random name');
console.log(newPoll.getTwo()); // returns undefined, not 2

这是关闭,ES 6还是其他问题?

2 个答案:

答案 0 :(得分:7)

箭头函数仍然是一个函数,并且您只从forEach回调函数返回,而不是从getTwo返回,您也必须从getTwo函数返回。

不清楚为什么你会用循环来检查某种东西,但这个概念就像是

getTwo() {
    var n = 0;
    this.nums.forEach(num => {
      if (num === 2) n = num;
    })
    return n; // returns something from getTwo()
  }

答案 1 :(得分:4)

正如 adeneo 所提到的,您必须从getTwo函数返回才能达到您想要的效果。从回传到forEach的回调中,无论其是否为箭头函数,都不会从forEach本身返回。

除了forEach,您可以使用find,您可以用更少的代码编写并直接返回:

getTwo() {
  return this.nums.find(num => num === 2);
}