我正在寻找数组对象中的位置。基本上,每个数字代表费用项目的年度金额,我需要每年对这些数字求和。对象看起来像这样(见下文),结果应该是一个数组= [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];
});
});
就目前而言,我需要保持原始结构,并且正在努力使该功能适应我所需要的。任何帮助表示赞赏!
答案 0 :(得分: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>');
答案 1 :(得分: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)