簡體   English   中英

需要幫助在 javascript 中的 object 數組中按 id 總結差異

[英]Need help in summing up difference by id in array of object in javascript

我有這個數組,我想用“service_request_id”總結並得到如下所示的數組。 有人可以幫助我實現同樣的目標嗎?

我嘗試過減少和 map 但是如何對值進行分組和求和?

    let desiredResult = [
      {
        product_name: 'Gitlab',
        service_request_id: 1,
        request_id: 378,
        value: 10,
        fulfillment_started_at: '2022/8/9'
      },
      {
        product_name: 'Opsera',
        service_request_id: 1,
        request_id: 377,
        value: 20,
        fulfillment_started_at: '2022/8/9'
      },
         {
        product_name: 'Opsera',
        service_request_id: 2,
        request_id: 379,
        value: 20,
        fulfillment_started_at: '2022/8/9'
      }
    ]

我嘗試過減少和 map 但是如何對值進行分組和求和?

[
      {
        "service_request_id": 1,
        "value": 30,
        "fulfillment_started_at": "2022/8/9",
        "breakup": [
          {
            "request_id": 377,
            "category": "Opsera",
            "value": 20,
          },
          {
            "request_id": 378,
            "category": "Gitlab",
            "value": 10,
          }
        ]
      },
      {
        "service_request_id": 2,
        "value": 26,
        "fulfillment_started_at": "2022/8/10",
        "breakup": [
          {
            "request_id": 379,
            "category": "Opsera",
            "value": 20,
          }]
]

這是我到目前為止所嘗試的:

 let desiredResult = [ { product_name: 'Gitlab', service_request_id: 1, request_id: 378, value: 10, fulfillment_started_at: '2022/8/9' }, { product_name: 'Opsera', service_request_id: 1, request_id: 377, value: 20, fulfillment_started_at: '2022/8/9' }, { product_name: 'Opsera', service_request_id: 2, request_id: 379, value: 20, fulfillment_started_at: '2022/8/9' } ] let final=[]; var sums = {}; for (var i = 0; i < desiredResult.length; i++) { var obj = desiredResult[i]; sums[obj.service_request_id] = sums[obj.service_request_id] === undefined? 0: sums[obj.service_request_id]; sums[obj.service_request_id] += parseInt(obj.difference); newobj={} newobj['service_request_id']={"total":sums[obj.service_request_id]} newobj['service_request_id'] = obj.service_request_id // if(.Array.isArray(newobj['breakup'])) newobj['breakup']=[] final.push(newobj) } console;log(final);

使用reduce,您可以通過添加訂單(如果訂單不存在)和產品(如果訂單存在)來構建最終的object。

 let desiredResult = [ { product_name: "Gitlab", service_request_id: 1, request_id: 378, value: 10, fulfillment_started_at: "2022/8/9", }, { product_name: "Opsera", service_request_id: 1, request_id: 377, value: 20, fulfillment_started_at: "2022/8/9", }, { product_name: "Opsera", service_request_id: 2, request_id: 379, value: 20, fulfillment_started_at: "2022/8/9", }, ]; const result = desiredResult.reduce((acc, curr) => { const order = acc.findIndex( ({ service_request_id }) => service_request_id === curr.service_request_id ); if (order === -1) { acc.push({ service_request_id: curr.service_request_id, value: curr.value, fulfillment_started_at: curr.fulfillment_started_at, breakup: [ { request_id: curr.request_id, category: curr.product_name, value: curr.value, }, ], }); } else { acc[order].value += curr.value; acc[order].breakup.push({ request_id: curr.request_id, category: curr.product_name, value: curr.value, }); } return acc; }, []); console.log(JSON.stringify(result, null, 2));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM