本文介绍了减少每个不同对象的对象数组和sum属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我不确定我应该考虑哪些功能来实现我想要做的事情。可能减少是不正确的。
I am not sure for what functions I should look at to achieve what I am trying to do. Probably reduce is not correct.
数据库查询返回一个像这样的对象列表:
A database query returns a list of objects like this one:
result = [{group1: 'A', group2: 'A', SUM: 5},
{group1: 'A', group2: 'B', SUM: 2},
{group1: 'C', groupe2: 'B', SUM: 3}
]
我想减少或分组这个数组,以获得每个不同的 group1
和 group2 $ c的对象$ c>值和它的SUM相对值如下所示:
I want to "reduce" or "group" this array to obtain an object for each distinct group1
and group2
values and the SUM relative of it like this object below:
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}
]
推荐答案
第一个函数减少结果
以查找每个组的总和。
First function reduces result
to find the sums for each group.
然后我们通过每个组返回结果。
Then we go through each group to return the results.
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);
这篇关于减少每个不同对象的对象数组和sum属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!