2016-09-22 185 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