Métodos de clase ES6 que no devuelven nada dentro del bucle forEach

Por alguna razón, el método getTwo() dentro de PollClass no devolverá 2 sino undefined . Si pongo la statement de return fuera del bucle .forEach() , se obtiene un valor sin embargo.

 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 

¿Se trata de un problema con el cierre, ES 6 o un problema completamente distinto?

Una función de flecha sigue siendo una función, y solo está regresando de la función de callback forEach, no de getTwo, también tiene que regresar de la función getTwo .

No está del todo claro por qué usarías un bucle para verificar algo de esa manera, pero el concepto sería algo así como

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

Como mencionó adeneo , debe regresar de la función getTwo para lograr lo que desea. Al regresar de la callback a forEach , independientemente de si se forEach una función de flecha o no, no regresa de forEach .

Alternativamente a forEach , puede usar la función de find que puede escribir en menos código y devolver directamente:

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