我正在为具有多个属性的groupBy函数寻找lodash/typerscript解决方案。
以下是我迄今为止尝试过的:
JSON码:
[
{
"jobId": 1001,
"id": 1,
"timeSegmentId": 1,
"balance": 100
},
{
"jobId": 1001,
"id": 2,
"timeSegmentId": 1,
"balance": 100
},
{
"jobId": 1002,
"id": 1,
"timeSegmentId": 1,
"balance": 100
},
{
"jobId": 1002,
"id": 1,
"timeSegmentId": 1,
"balance": 100
},
{
"jobId": 1003,
"id": 1,
"timeSegmentId": 1,
"balance": 100
},
{
"jobId": 1003,
"id": 1,
"timeSegmentId": 2,
"balance": 100
},
{
"jobId": 1003,
"id": 1,
"timeSegmentId": 2,
"balance": 100
},
{
"jobId": 1003,
"id": 1,
"timeSegmentId": 2,
"balance": 100
},
{
"jobId": 1003,
"id": 1,
"timeSegmentId": 2,
"balance": 100
}
]
Typescript代码:
// Group of same ids
let mergeResults = _.groupBy(this.BSSDealresults, function (n) {
return n.timeSegmentId;
});
const objKeys = Object.keys(mergeResults);
const AggregateResults = [];
objKeys.forEach(item => {
if (mergeResults[item].length > 1) {
let agg_balance = 0;
mergeResults[item].forEach(element => {
agg_balance += element.balance;
});
AggregateResults.push({
id: mergeResults[item][0].id,
jobId: mergeResults[item][0].jobId,
balance: agg_balance
});
} else {
AggregateResults.push(mergeResults[item][0]);
}
})
然而,我正在寻找基于多个属性的聚合结果,例如id、jobId和timeSegId。
在lodash/typescript中,有没有什么方法可以通过使用多个属性来应用程序?
预期输出应为:
[
{
"jobId": 1001,
"id": 1,
"timeSegmentId": 1,
"balance": 100
},
{
"jobId": 1001,
"id": 2,
"timeSegmentId": 1,
"balance": 100
},
{
"jobId": 1002,
"id": 1,
"timeSegmentId": 1,
"balance": 200
},
{
"jobId": 1003,
"id": 1,
"timeSegmentId": 1,
"balance": 100
},
{
"jobId": 1003,
"id": 1,
"timeSegmentId": 2,
"balance": 100
},
{
"jobId": 1003,
"id": 1,
"timeSegmentId": 2,
"balance": 300
}
]