Search code examples
javascriptarraysreactjstypescriptmapreduce

total sum of nested object value in array


how to sum of the all the stationuserAmount values in the given array

            "staions": [
                {
                    "name": "Guwahati",                        
                    "stationuser": [
                        {
                            "name": "Suranjan Dey",                                
                            "stationuserAmount": "190"
                        }        
                       
                    ]
                },                                     
                {
                    "name": "Bhubaneshwar",                        
                    "stationuser": [
                        {
                            "name": "Soubhagya Behera",                                
                            "stationuserAmount": "280"
                        },
                        {
                            "name": "Om Prakash Sahoo",                                
                            "stationuserAmount": "280"
                        }
                    ]
                }             
            ]

I was tried with map and reduce on array values to find the total sum of the given array.

    1) const salesuserTotalCount = this.state.staions.map(items => ({          
    users: items.stationuser.reduce((a, b) => {return 
    a.stationuserAmount+b.stationuserAmount}    
    )}))
   2) const salesuserTotalCount = this.state.staions.map(items => ({
    ...items,
    users: items.stationuser.map(stationitems 
   =>stationitems.stationuserAmount).reduce((a, c) 
              => { return a + c })}))

Solution

  • You can do reduce inside reduce

    const stations = [
        {
            "name": "Guwahati",                        
            "stationuser": [
                {
                    "name": "Suranjan Dey",                                
                    "stationuserAmount": 190
                }        
               
            ]
        },                                     
        {
            "name": "Bhubaneshwar",                        
            "stationuser": [
                {
                    "name": "Soubhagya Behera",                                
                    "stationuserAmount": 280
                },
                {
                    "name": "Om Prakash Sahoo",                                
                    "stationuserAmount": 280
                }
            ]
        }             
    ]
    
    console.log(stations.reduce((acc, curr)=>{
        return acc+curr.stationuser.reduce((a,c)=>a+c.stationuserAmount,0)
    },0));