2016-07-03 42 views
0

我得到undefined。代碼沒有這個功能。我究竟做錯了什麼?javascript reduce得到undefined

var myArr = [ 1, 2, 3, 4, 5 ]; 
 

 
function getSums(arr) { 
 
    arr.reduce(a => a+1, 0); 
 
} 
 

 
document.write(getSums(myArr));

+0

您需要從函數返回。 –

+0

@nenad這是一個箭頭函數,默認情況下它有RETURN。 –

+2

'getSums'不是一個箭頭函數。 – JJJ

回答

4

三個問題:

  1. 使用reduce,您使用的第一參數(至少):累加器,和當前條目。 (它具有其他參數爲好,但前兩個是最常使用的。)

  2. 你的邏輯只是在做a + 1,這是不是從陣列增加值加在一起,它的加入1的價值該條目。

  3. 您需要返回您的getSums函數返回的值爲reduce

所以:

var myArr = [ 1, 2, 3, 4, 5 ]; 
 

 
function getSums(arr) { 
 
    return arr.reduce((sum, a) => sum + a, 0); 
 
//^^^^^^   ^^^^ ^ ^^^^^^ 
 
} 
 

 
console.log(getSums(myArr));

或者您可以使用箭頭語法定義getSums,然後返回將意味着如果你用一個簡潔的函數體:

var myArr = [ 1, 2, 3, 4, 5 ]; 
 

 
let getSums = arr => arr.reduce((sum, a) => sum + a, 0); 
 

 
console.log(getSums(myArr));

+0

你不需要傳遞一個初始值來減少包裝因爲'除了一個。 – ftor

+0

@ LUH3417:'reduce' **的回調總是**接受累加器,這是第一個參數。確實,我們可以在這種特殊情況下將',0'離開呼叫,因爲這是一個求和操作。我通常更喜歡它的清晰度,但這是一種風格。 –