Search code examples
javascriptjsonarr

How to sum the array values


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?


Solution

  • 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)