-1

I have an array of objects which consists of objects containing type, quantity, name, and other metadata.

It looks like:

[
    {
       "id":"31362",
       "quantity":"7",
       "type":"wood",
       "metadata":{
          "name":"Wood Pack"
       }
    },
    {
       "id":"31361",
       "quantity":"13",
       "type":"sand",
       "metadata":{
          "name":"Sand Pack"
       }
    },
    {
       "id":"29161",
       "quantity":"7",
       "type":"sand",
       "metadata":{
          "name":"Sand Pack"
       }
    },
    {
       "id":"31398",
       "quantity":"50000",
       "type":"energy",
       "metadata":{
          "name":"Energy Pack"
       }
    },
    {
       "id":"31363",
       "quantity":"50000",
       "type":"energy",
       "metadata":{
          "name":"Energy Pack"
       }
    },
    {
       "id":"31368",
       "quantity":"50000",
       "type":"energy",
       "metadata":{
          "name":"Energy Pack"
       }
    },
    {
       "id":"30755",
       "quantity":"1",
       "type":"energy",
       "metadata":{
          "name":"Energy Pack"
       }
    }
 ]

What I am trying to achieve is to end up with another array that has an object for each type property from below and the sum of quantity

e.g.

    [
   {
      type: 'wood',
      quantity: 7
   },
   {
      type: 'sand',
      quantity: 20
   }
   ....
]
Nguyễn Văn Phong
  • 13,506
  • 17
  • 39
  • 56
MMXX11
  • 127
  • 3
  • 12

1 Answers1

-1

Try this for loop process.

let a = [
    {
       "id":"31362",
       "quantity":"7",
       "type":"wood",
       "metadata":{
          "name":"Wood Pack"
       }
    },
    {
       "id":"31361",
       "quantity":"13",
       "type":"sand",
       "metadata":{
          "name":"Sand Pack"
       }
    },
    {
       "id":"29161",
       "quantity":"7",
       "type":"sand",
       "metadata":{
          "name":"Sand Pack"
       }
    },
    {
       "id":"31398",
       "quantity":"50000",
       "type":"energy",
       "metadata":{
          "name":"Energy Pack"
       }
    },
    {
       "id":"31363",
       "quantity":"50000",
       "type":"energy",
       "metadata":{
          "name":"Energy Pack"
       }
    },
    {
       "id":"31368",
       "quantity":"50000",
       "type":"energy",
       "metadata":{
          "name":"Energy Pack"
       }
    },
    {
       "id":"30755",
       "quantity":"1",
       "type":"energy",
       "metadata":{
          "name":"Energy Pack"
       }
    }
 ]
let b = {};
a.forEach((v)=>{b[v.type] = b[v.type]?b[v.type]+parseInt(v.quantity):parseInt(v.quantity)});

let new_arr = [];
for (const [key, value] of Object.entries(b)) {
  let temp = {type:key, quantity: value}
  new_arr.push(temp);
}

console.log(new_arr);
Jakir Hossen
  • 451
  • 4
  • 13