How to sum the array values

41 Views Asked by At

I need to understand the simplest way of doing this. I've got an array of objects:

const data =
[
    {
        "_id": "63613c9d1298c1c70e4be684",
        "NameFood": "Coca",
        "count": 2
    },
    {
        "_id": "63621f10b61f259b13cafe8e",
        "NameFood": "Xa xi",
        "count": 2,
    },
    {
        "_id": "63654bf94b61091ae9c4bfd3",
        "NameFood": "Cafe đen",
        "count": 2,
    },
    {
        "count": 1,
        "_id": "63613c9d1298c1c70e4be684",
        "NameFood": "Coca",
    }
]

I expect the result: filter duplicate values by _Id and plus 'count'

const data =
[
    {
        "_id": "63613c9d1298c1c70e4be684",
        "NameFood": "Coca",
        "count": 3
    },
    {
        "_id": "63621f10b61f259b13cafe8e",
        "NameFood": "Xa xi",
        "count": 2,
    },
    {
        "_id": "63654bf94b61091ae9c4bfd3",
        "NameFood": "Cafe đen",
        "count": 2,
    },
]

Can anybody explain it to me step by step, please?

1

There are 1 best solutions below

0
flyingfox On BEST ANSWER

Just using reduce() can do it

const data =
[
    {
        "_id": "63613c9d1298c1c70e4be684",
        "NameFood": "Coca",
        "count": 2
    },
    {
        "_id": "63621f10b61f259b13cafe8e",
        "NameFood": "Xa xi",
        "count": 2,
    },
    {
        "_id": "63654bf94b61091ae9c4bfd3",
        "NameFood": "Cafe đen",
        "count": 2,
    },
    {
        "count": 1,
        "_id": "63613c9d1298c1c70e4be684",
        "NameFood": "Coca",
    }
]

let result = data.reduce((a,c) =>{
  let obj = a.find(i => i._id == c._id)
  if(obj){
     obj.count += c.count 
   }else{
     a.push(c)
   }
  return a
},[])
console.log(result)