gpt4 book ai didi

javascript - 使用 Javascript、Underscore 或 Lodash 进行分组 + 求和

转载 作者:行者123 更新时间:2023-12-03 07:28:34 24 4
gpt4 key购买 nike

我想知道如何使用 Underscore 或 Lodash 执行以下分组和总结。

MY ARRAY :

[
{_id : "1", S : "2"},
{_id : "1", M : "4"},
{_id : "2", M : "1"},
{_id : "" , M : "1"},
{_id : "3", S : "3"}
]

DESIRED OUTPUT

[
{_id : "1", M : "4", S : "2", Total: "6"},
{_id : "2", M : "1", S : "0", Total: "1"},
{_id : "3", M : "0", S : "3", Total: "3"},
{_id : "", M : "1", S : "0", Total: "1"}
]

What I have this far

我坚信到目前为止我已经完成了以下操作,但我无法弄清楚我放入了什么?

var groups = _.groupBy(MyArray, function(value){
return value._id;
});

var data = _.map(groups, function(group){
return {
_id: group[0]._id,
M: ?? ,
S: ?? ,
T: ??

}
});

最佳答案

使用纯 JavaScript 的解决方案,使用 Array.prototype.forEachArray.prototype.map功能

var obj = {}

// arr is your first array
arr.forEach(function(a) {
var t = obj[a._id];
if (t) {
t.M += a.M ? parseInt(a.M, 10) : 0;
t.S += a.S ? parseInt(a.S, 10) : 0;
t.Total = parseInt(t.M, 10) + parseInt(t.S, 10);
} else {
t = {};
t._id = a._id;
t.M = a.M ? parseInt(a.M, 10) : 0;
t.S = a.S ? parseInt(a.S, 10) : 0;
t.Total = parseInt(t.M, 10) + parseInt(t.S, 10);
obj[a._id] = t;
}
});

var res = Object.keys(obj).map(function (k) {
return obj[k];
})

console.log(res);

结果:

[ { _id: '1', M: 4, S: 2, Total: 6 },
{ _id: '2', M: 1, S: 0, Total: 1 },
{ _id: '3', M: 0, S: 3, Total: 3 },
{ _id: '', M: 1, S: 0, Total: 1 } ]

关于javascript - 使用 Javascript、Underscore 或 Lodash 进行分组 + 求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35897843/

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