2016-07-03 10 views
0

私は未定義になっています。コードは機能なしで動作します。私は間違って何をしていますか?javascript reduce undefined

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

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

 
document.write(getSums(myArr));

+0

関数から 'return'する必要があります。 –

+0

@nenadこれは矢印関数であり、デフォルトではその中にRETURNがありますか? –

+2

'getSums'は矢印関数ではありません。 – JJJ

答えて

4

3つの問題は:アキュムレータ、および現在のエントリ:

  1. reduceを使用して、あなたは(少なくとも)最初の引数を使用します。 (それだけでなく、他の引数を持っていますが、最初の二つは、最も頻繁に使用されるものです。)

    あなたのロジックはそれがために値に1を追加しています、一緒に配列から値を加算していないa + 1をやっていた
  2. そのエントリ。

  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

あなたのラッパーは、 tを除いて。 – ftor

+0

@ LUH3417: 'reduce' **のコールバックは常にアキュムレータを受け付けます。これは最初の引数です。これは合計演算であるため、この特定のケースでは '、0'を呼び出しから外すことができることは事実です。私は通常、それを持っていることの明快さを好むが、スタイルのことだ。 –

関連する問題