var Employees = [
{
"id": "382740",
"PayrollID": "8117817425",
"EmployeeName": "Bob Jones",
"StartTime": "15:15:00.0000000",
"FinishTime": "18:15:00.0000000",
"BreakTime": "45",
"TotalTime": 2,
"Comments": "Test",
"Rate": "19"
},
{
"id": "439617",
"PayrollID": "8117817425",
"EmployeeName": "Peter Pan",
"StartTime": "16:15:00.0000000",
"FinishTime": "21:15:00.0000000",
"BreakTime": "60",
"TotalTime": 4,
"Comments": "Test",
"Rate": "32"
},
{
"id": "201636",
"PayrollID": "5042289623",
"EmployeeName": "Bob Jones",
"StartTime": "09:56:00.0000000",
"FinishTime": "11:56:00.0000000",
"BreakTime": "45",
"TotalTime": 1.25,
"Comments": "Test Comments",
"Rate": "19"
},
{
"id": "799653",
"PayrollID": "5042289623",
"EmployeeName": "Clarke Kent",
"StartTime": "16:49:00.0000000",
"FinishTime": "21:49:00.0000000",
"BreakTime": "60",
"TotalTime": 4,
"Comments": "Test",
"Rate": "19"
},
{
"id": "951567",
"PayrollID": "5042289623",
"EmployeeName": "Bob Jones",
"StartTime": "01:49:00.0000000",
"FinishTime": "16:49:00.0000000",
"BreakTime": "60",
"TotalTime": 14,
"Comments": "Test",
"Rate": "10"
}
]
I have the above array and I want to sum the TotalTime where the EmployeeName is the same. It should return a new array with like entries combined and the TotalTime added. I've used the below but it only returns two values because of Map. Is there a way I can achieve this while still maintaining all the values in the original array?
const CombinedArray = Array.from(Employees.reduce(
(m, {EmployeeName, TotalTime}) => m.set(EmployeeName, (m.get(EmployeeName) || 0) + TotalTime,), new Map
), ([EmployeeName, TotalTime]) => ({EmployeeName, TotalTime}));