Javascript Typescript/lodash:如何获得具有多个公共属性的结果/对象

Javascript Typescript/lodash:如何获得具有多个公共属性的结果/对象,javascript,typescript,filter,group-by,lodash,Javascript,Typescript,Filter,Group By,Lodash,我正在为具有多个属性的groupBy函数寻找lodash/typerscript解决方案。 以下是我迄今为止所尝试的: JSON: 打字脚本代码: // Group of same ids let mergeResults = _.groupBy(this.BSSDealresults, function (n) { return n.timeSegmentId; }); const objKeys = Object.keys(mergeResults); cons

我正在为具有多个属性的groupBy函数寻找lodash/typerscript解决方案。 以下是我迄今为止所尝试的:

JSON:

打字脚本代码:

  // 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对余额进行分组,因为我已经基于属性id应用了lodash\u groupBy函数

然而,我正在寻找基于多个属性的聚合结果,例如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
    }
]

您可以通过从3个ID中创建一个字符串来为u.groupBy生成密钥。然后,您可以使用组BSSDealresults对象,使用或克隆第一个元素,并使用以下各项获得组合余额:

const BSSDealresults=[{jobId:1001,id:1,timeSegmentId:1,balance:100},{jobId:1001,id:2,timeSegmentId:1,balance:100},{jobId:1002,id:1002,id:1,timeSegmentId:1,balance:100},{jobId:1003,id:1,timeSegmentId:1,balance:100},{jobId:1003,id:1,timeSegmentId:2,balance:100}; const mergeResults=..groupByBSSDealresults,{id,jobId,timeSegmentId}=>`${id}-${jobId}-${timeSegmentId}`; const AggregateResults=\uu0.mapmergeResults,组=>{ …组[0], 余额:uu.sumBygroup,“余额” }; console.logAggregateResults;
在给定输入数组的情况下,你能给出一个你希望得到的输出的例子吗?在对问题的编辑中,您希望得到什么结果?给我举个例子。用预期输出更新我的问题。
[
    {
        "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
    }
]