2016-09-01 5 views
-1

配列を持っています。この配列のすべての要素はobjectであり、配列も含まれます。 だから私は配列内のすべての項目の合計を取得する必要があります、それは配列内に存在します。jsを使用して要素の合計を取得

私は、次の試してみました:

function getSum(total, item) { 
    return total + item; 
} 

var sum = array.reduce((total, item) => total + item.data.reduce(getSum)); 

しかし、それは合計でない返しますが、Objectで始まる文字列、...

+3

'array'の値を表示します。 – Barmar

答えて

4

をあなたはtotalためan initial valueを設定する必要があります。

var sum = array.reduce((total, item) => total + item.data.reduce(getSum, 0), 0); 

そうでない場合は、配列の最初の項目で初期化されます。これはオブジェクトの場合です。だからあなたはその予期しない文字列を取得しています。

あなたも、第二の減少のための初期値としてtotalを使用して、コードを短縮することができます

var sum = array.reduce((total, item) => item.data.reduce(getSum, total), 0); 
+0

これは 'getSum'なしで行うことができます:p –

+0

@JaromandaX true、しかし私はそれをOPに残します:) – robertklep

+0

申し訳ありません、私はあなたの編集を見た前に答えとして投稿しました:p –

0

それは単に

var array = [ 
    {data: [1,2,3]}, 
    {data: [4,5,6]} 
]; 
array.reduce((total, item) => total + item.data.reduce((a, b) => a + b), 0); 
// result = 21 

だ第二(内側の)最初のを持っていません削減値のため、

  • 最初の呼び出し:a = data [0]、b = data [1]
  • 第二の呼び出し:=現在の合計、B =データ[2]

は、ドキュメントを減らす参照

第一(外側)がコールバックの中の項目は数値ではないため低減は、初期値を必要とDOES

関連する問題