gpt4 book ai didi

javascript - 减少对象数组并为每个不同的对象求和属性

转载 作者:行者123 更新时间:2023-11-30 16:36:14 25 4
gpt4 key购买 nike

我不确定我应该查看哪些功能来实现我想做的事情。可能 reduce 是不正确的。

数据库查询返回像这样的对象列表:

result = [{group1: 'A', group2: 'A', SUM: 5},
{group1: 'A', group2: 'B', SUM: 2},
{group1: 'C', groupe2: 'B', SUM: 3}
]

我想“减少”或“分组”这个数组以获得每个不同的 group1group2 值的对象以及它的 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);

关于javascript - 减少对象数组并为每个不同的对象求和属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32659248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com