我想知道如何使用 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.forEach
和 Array.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/