我不确定我应该看看什么功能来实现我想做的事情。可能reduce是不正确的
数据库查询返回一个对象列表,如下所示:
result = [{group1: 'A', group2: 'A', SUM: 5},
{group1: 'A', group2: 'B', SUM: 2},
{group1: 'C', groupe2: 'B', SUM: 3}
]
我想"减少"或"组"这个数组,以获得每个不同的group1
和group2
值的对象及其相对SUM,如下面的对象:
wanted = [{group1: 'A', group1_SUM: 7, group2: 'A', group2_SUM: 5},
{group1: 'B', group1_SUM: 0, group2: 'B', group2_SUM: 5},
{group1: 'C', group1_SUM: 3, group2: 'C', group2_SUM: 0}
]
或者也可以是:
wanted = [{groupName: 'A', group1_SUM: 7, group2_SUM: 5},
{groupName: 'B', group1_SUM: 0, group2_SUM: 5},
{groupName: 'C', group1_SUM: 3, group2_SUM: 0}
]
第一个函数化简result
求每组的和。
然后遍历每一组以返回结果。
var result = [{group1: 'A', group2: 'A', SUM: 5},
{group1: 'A', group2: 'B', SUM: 2},
{group1: 'C', group2: 'B', SUM: 3}
];
(function groupSum(result) {
var sums = result.reduce(function(a, e) {
a.group1_SUM[e.group1] = (a.group1_SUM[e.group1] || 0) + e.SUM;
a.group2_SUM[e.group2] = (a.group2_SUM[e.group2] || 0) + e.SUM;
return a;
}, {group1_SUM: {}, group2_SUM: {}});
return Array.from(new Set(Object.keys(sums.group1_SUM).concat(Object.keys(sums.group2_SUM)))).map(function(e) {
return {
groupName: e, group1_SUM: sums.group1_SUM[e] || 0, group2_SUM: sums.group2_SUM[e] || 0
}
});
})(result);