2016-09-22 188 views
0

由于某种原因,PollClass中的方法getTwo()将不返回2,而是undefined。如果我将return语句放在.forEach()循环之外,则会返回一个值。ES6类方法在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还是其他问题?

+0

目前尚不清楚,你想,如果回到什么'this.nums'没有2,或者它不止一个2.不管怎样,你最好使用'.some'而不是'forEach'。 – raina77ow

+0

'forEach'不会返回任何东西。这不是'for'循环 – Redu

+0

*“这是关闭,ES 6还是其他问题?”*都不是。内部函数不能让外部函数返回一些东西。 –

回答

7

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

这不是很清楚,你为什么会使用一个循环来检查个什么东西,但这个概念可能会像

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

尽管这会起作用,但它仍然不是最理想的,因为即使找到了'2',它仍会继续循环。根据OP想要的行为,传统的'for'循环或'find'会是更好的选择。 –

+2

@JustinNiessner - 当然,'Array.some','Array.find','Array.indexOf'和其他一些数组方法在这里可能会很有用,但是不清楚OP需要什么,例如'Array。一些'会返回一个布尔值。 – adeneo

+0

'返回this.nums.indexOf(2)!== -1'虽然是最简单的,但它应该检查数组是否存在。 – adeneo

4

由于adeneo提到的,你必须从getTwo函数返回实现你想要的。从回调中回传到forEach,无论其是否有箭头功能,都不​​会从forEach本身返回。

或者到forEach,你可以使用find你可以在更少的代码编写,并直接返回:

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

我不知道find方法,这段代码为我省去了很多头疼的事情,试图摸索一个索引值,所以我非常感谢你的帮助! – Rich

+0

很高兴帮助伴侣 – nem035