Search code examples
javascriptobjectforeach

How get total in an array of object


I have this array, and i want to get the sum amount of each Order.item

[
{"OrderReceiverId":"6698eea782e24cc9d42eab7f",
"Order":{
 "CustomerId":"669aa55079cce2e96f9a7e69",
"CustomerName":"Erigbemi",
"Date":"2024/07/19",
"TrackingId":"43035",
"Status":"Processing",
"Amount":{"$numberInt":"25000"},
"Item":"Orange"
 }
}, {"OrderReceiverId":"6698eea782e24cc9d42eab7f",
"Order":{
 "CustomerId":"669aa55079cce2e96f96t77",
"CustomerName":"James",
"Date":"2024/07/19",
"TrackingId":"42335",
"Status":"Processing",
"Amount":{"$numberInt":"15000"},
"Item":"Tomatoes"
 }, {"OrderReceiverId":"6698eea782e24cc9d42eab7f",
"Order":{
 "CustomerId":"669aa55079cce2e96f9a7e69",
"CustomerName":"Erigbemi",
"Date":"2024/07/19",
"TrackingId":"22235",
"Status":"Processing",
"Amount":{"$numberInt":"15000"},
"Item":"Tomatoes"
 }
]

How do i get the total of each "Item", something like this

"Rice": 30000 "Tomatoes": 15000

i tried this

let itm = {};

            sellingInfo.forEach(order => {
                const item = order.Order.Item;
                const amt = order.Order.Amount;
                
                if(!itm[item]){
                    itm[item] = amt;
                }
                itm[item] += amt;
            })

            res.json(itm);

But i seemd to be getting the wrong out put, this is what I get { "Orange": 50000, "Tomatoes": 45000 }


Solution

  • you may use Array.reduce() method

    const data = 
      [ { OrderReceiverId: '6698eea782e24cc9d42eab7f'
        , Order: 
          { CustomerId   : '669aa55079cce2e96f9a7e69'
          , CustomerName : 'Erigbemi'
          , Date         : '2024/07/19'
          , TrackingId   : '43035'
          , Status       : 'Processing'
          , Amount       : { $numberInt: '25000' } 
          , Item         : 'Orange'
        } } 
      , { OrderReceiverId: '6698eea782e24cc9d42eab7f'
        , Order: 
          { CustomerId   : '669aa55079cce2e96f96t77'
          , CustomerName : 'James'
          , Date         : '2024/07/19'
          , TrackingId   : '42335'
          , Status       : 'Processing'
          , Amount       : { $numberInt: '20000' } 
          , Item         : 'Rice'
        } } 
      , { OrderReceiverId: '6698eea782e24cc9d42eab7f'
        , Order: 
          { CustomerId   : '669aa55079cce2e96f9a7e69'
          , CustomerName : 'Erigbemi'
          , Date         : '2024/07/19'
          , TrackingId   : '22235'
          , Status       : 'Processing'
          , Amount       : { $numberInt: '12000' } 
          , Item         : 'Rice'
        } } 
      ];
      
    const Sums = data.reduce( (r,{Order}) => 
      {
      r[Order.Item] ??= 0;
      r[Order.Item] += +Order.Amount.$numberInt;
      return r;
      },{});
    
    console.log( Sums );
    .as-console-wrapper{max-height:100% !important;top:0}
    .as-console-row::after{display:none !important;}