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

标签 javascript underscore.js lodash

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

相关文章:

javascript - jquery 中的太阳系

javascript - 比较主干中的两个模型属性

javascript - Underscore.js: Uncaught ReferenceError :数据未定义

javascript - 此代码的工作原理 .html(_.template()({ }) )

javascript - 基本 JavaScript 练习

javascript - 如何在 Laravel 中显示每月的产品销量

postman - 如何使用 lodash 在 postman 中生成 14 位长的随机数?

javascript - 使用 LODASH 重构

javascript - 如何在生成警报后清除 HTML 输入标签

javascript - Lodash 或任何导致 Uncaught SyntaxError : Unexpected token import 的导入