We can use the array function reduce for this:
We just also need to turn your data in milliseconds to days.
const data = [
{
"id": 9,
"job_id": 302,
"user_id": 63,
"message": "User message 1",
"created_at": 1584130559280
},
{
"id": 10,
"job_id": 302,
"user_id": 63,
"message": "User message 2",
"created_at": 1584130559280
},
{
"id": 14,
"job_id": 302,
"user_id": 63,
"message": "Hello",
"created_at": 1584216959280
},
{
"id": 15,
"job_id": 302,
"user_id": 63,
"message": "World",
"created_at": 1584216959280
}
]
const groupedData = data.reduce((aggObj, child) => {
const myDate = new Date(child.created_at);
//console.log(myDate.toDateString());
//console.log(myDate.getTime());
if (aggObj.hasOwnProperty(myDate.toDateString())){
aggObj[myDate.toDateString()].push(child);
} else {
aggObj[myDate.toDateString()] = [child];
}
return aggObj
}, {})
console.log(groupedData);
.as-console-wrapper { max-height: 100% !important; top: 0; }
I changed the created_at values so the first two messages are from yesterday and the last two from today.
The output is:
{
"Fri Mar 13 2020": [
{
"id": 9,
"job_id": 302,
"user_id": 63,
"message": "User message 1",
"created_at": 1584130559280
},
{
"id": 10,
"job_id": 302,
"user_id": 63,
"message": "User message 2",
"created_at": 1584130559280
}
],
"Sat Mar 14 2020": [
{
"id": 14,
"job_id": 302,
"user_id": 63,
"message": "Hello",
"created_at": 1584216959280
},
{
"id": 15,
"job_id": 302,
"user_id": 63,
"message": "World",
"created_at": 1584216959280
}
]
}