2016-05-10 29 views
3

配列のオブジェクト内の位置の合計を探しています。基本的には、各数値は費用項目の年間金額を表しており、これらを合計する必要があります。オブジェクトは次のようになります(下を参照)。結果は、以下のオブジェクトを指定した= [1500、1900、2400]の配列になります。配列のオブジェクト内の配列の値の合計

x = [{ 
     "HVAC": [100, 200, 300, 400], 
     "foundation": [500, 600, 700, 800], 
     "roof": [900, 1000, 1100, 1200] 
    }]; 

配列が命名し、代わりのように見えていなかった場合は、次の

x = [ 
      [100, 200, 300, 400], 
      [500, 600, 700, 800], 
      [900, 1000, 1100, 1200] 
     ]; 

次に、この関数は、私は(この記事のおかげでSum array of arrays (matrix) vertically efficiently/elegantly)やりたいことになります。

$scope.reserveTotals = x.reduce(function(a, b) { 
     return a.map(function(v, i) { 
     return v + b[i]; 
     }); 
    }); 

それがそのままで、私は元の構造を保つ必要があり、その機能を私が必要とするものに適応させるのに苦労しています。どんな助けにも感謝!

答えて

3

わずかに異なるソリューションを使用することができます。

var x = { "HVAC": [100, 200, 300, 400], "foundation": [500, 600, 700, 800], "roof": [900, 1000, 1100, 1200] }, 
 
    result = Object.keys(x).reduce(function (r, k) { 
 
     x[k].forEach(function (a, i) { 
 
      r[i] = (r[i] || 0) + a; 
 
     }); 
 
     return r; 
 
    }, []); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

2

あなたはfor...inループとreduce

x = [{ 
 
    "HVAC": [100, 200, 300, 400], 
 
    "foundation": [500, 600, 700, 800], 
 
    "roof": [900, 1000, 1100, 1200] 
 
}]; 
 

 
for(var p in x[0]) { 
 
    x[0][p] = x[0][p].reduce((a, b) => { return a + b}); 
 
} 
 

 
console.log(x)

関連する問題