I have the following data that I want to sort based on the date - not including the timestamp.
NOTE: I have access to moment
for this task.
You could take just a slice from the date and later take the entries of the object and map new key/values.
const
data = [{ fixture: "AC v Inter", kickOffTime: "2018-06-14T15:00:00Z" }, { fixture: "DC v NYC", kickOffTime: "2018-06-15T12:00:00Z" }, { fixture: "AFC v LPC", kickOffTime: "2018-06-15T15:00:00Z" }, { fixture: "DTA v MC", kickOffTime: "2018-06-15T18:00:00Z" }, { fixture: "LAC v GC", kickOffTime: "2018-06-16T18:00:00Z" }];
result = Object
.entries(data.reduce((r, a) => {
var key = a.kickOffTime.slice(0, 10);
r[key] = r[key] || [];
r[key].push(a);
return r;
}, Object.create(null)))
.map(([date, fixtures]) => ({ date, fixtures }));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
You can group the array using reduce
into an object. Using Object.values
you can convert the object into array.
const data = [{
"fixture": "AC v Inter",
"kickOffTime": "2018-06-14T15:00:00Z",
},
{
"fixture": "DC v NYC",
"kickOffTime": "2018-06-15T12:00:00Z",
},
{
"fixture": "AFC v LPC",
"kickOffTime": "2018-06-15T15:00:00Z",
},
{
"fixture": "DTA v MC",
"kickOffTime": "2018-06-15T18:00:00Z",
},
{
"fixture": "LAC v GC",
"kickOffTime": "2018-06-16T18:00:00Z",
}
];
const result = Object.values(data.reduce((c, v) => {
let t = v['kickOffTime'].split('T', 1)[0];
c[t] = c[t] || {date: t,fixtures: []}
c[t].fixtures.push(v);
return c;
}, {}));
console.log(result);