I need help displaying a total of sessionTime to every goalName from an api I have created. I have tried mapping and reducing but was only able to get the total sessionTime.
I expect the results to come like this:
Learn Italian : 6
Parla con il mio amico in Italiano : 1
"records": [
{
"sessionTime": 1,
"goalName": "Learn Italian",
"timeStapmed": "10:08:23",
"date": "11/08/2021",
"id": 1
},
{
"sessionTime": 5,
"goalName": "Learn Italian",
"id": "PFKFKZ",
"timeStapmed": "10:14:48",
"date": "11/08/2021"
},
{
"sessionTime": 1,
"goalName": "Parla con il mio amico in italiano",
"id": "aP_g1-",
"timeStapmed": "10:21:28",
"date": "11/08/2021"
}
]
I think you're looking for an array#reduce
loop,
records.reduce(
(acc, { sessionTime, goalName }) =>
acc?.[goalName]
? { ...acc, [goalName]: acc[goalName] + sessionTime }
: { ...acc, [goalName]: sessionTime },
{}
);
we can go though each object and keep a sum of their values in the acc
variable.
Full code:
let records = [
{
sessionTime: 1,
goalName: "Learn Italian",
timeStapmed: "10:08:23",
date: "11/08/2021",
id: 1,
},
{
sessionTime: 5,
goalName: "Learn Italian",
id: "PFKFKZ",
timeStapmed: "10:14:48",
date: "11/08/2021",
},
{
sessionTime: 1,
goalName: "Parla con il mio amico in italiano",
id: "aP_g1-",
timeStapmed: "10:21:28",
date: "11/08/2021",
},
];
let newRecords = records.reduce((acc, {sessionTime, goalName}) => acc?.[goalName] ? {...acc, [goalName]: acc[goalName] + sessionTime} : {...acc, [goalName]: sessionTime}, {})
console.log(newRecords)