首页 > 解决方案 > 对象组的Javascript数组按多个值求和

问题描述

[ 
    { Phase: "Phase 1",Value1: "5", Value2: "4" },
    { Phase: "Phase 1",Value1: "3", Value2: "7" },
    { Phase: "Phase 1",Value1: "5", Value2: "2" },
    { Phase: "Phase 1",Value1: "2", Value2: "1" },
    { Phase: "Phase 2",Value1: "1", Value2: "3" },
    { Phase: "Phase 2",Value1: "4", Value2: "8" },
    { Phase: "Phase 2",Value1: "5", Value2: "1" },
    { Phase: "Phase 2",Value1: "1", Value2: "1" }
]

嗨,我有一个对象数组,我期待以下格式。我想通过添加 value1、value2 的所有数据来获得结果(它可以是动态的,也可以是更多的)按阶段分组。

我正在用 javascript 编码,但是结果不正确。

[ 
    { Phase: "Phase 1",Value1: "15", Value2: "14" },
    { Phase: "Phase 2",Value1: "11", Value2: "13" }
]

我找不到任何 lodash 功能来实现这一点。可以使用或不使用 lodash 来完成吗?

标签: javascript

解决方案


你可以试试这段代码

这不是那么通用的代码,但可以帮助您进一步编写代码

x = [ 
    { Phase: "Phase 1",Value1: "5", Value2: "4" },
    { Phase: "Phase 1",Value1: "3", Value2: "7" },
    { Phase: "Phase 1",Value1: "5", Value2: "2" },
    { Phase: "Phase 1",Value1: "2", Value2: "1" },
    { Phase: "Phase 2",Value1: "1", Value2: "3" },
    { Phase: "Phase 2",Value1: "4", Value2: "8" },
    { Phase: "Phase 2",Value1: "5", Value2: "1" },
    { Phase: "Phase 2",Value1: "1", Value2: "1" }
];

var ph1Val1 = 0; var ph1Val2 = 0; var ph2Val1 = 0; var ph2Val2 = 0;
for(var i = 0; i < x.length; i++){
     if(x[i].Phase == "Phase 1"){
            var v1 = x[i].Value1;
            var v2 = x[i].Value2;
            ph1Val1 = ph1Val1 + parseInt(v1);
            ph1Val2 = ph1Val2 + parseInt(v2);
     }
     if(x[i].Phase == "Phase 2"){
        var p2v1 = x[i].Value1;
        var p2v2 = x[i].Value2;
        ph2Val1 = ph2Val1 + parseInt(p2v1);
          ph2Val2 = ph2Val2 + parseInt(p2v2);
 }
}


var obj1 = { Phase: "Phase 1",Value1: ph1Val1, Value2: ph1Val2 };
var obj2 = { Phase: "Phase 2",Value1: ph2Val1, Value2: ph2Val2 };
var y = [];
y.push(obj1);
y.push(obj2);

console.log(y);


推荐阅读