Отфильтровать массив объектов по датам
Есть массив объектов например:
[
{
id: 1,
content: 'Test Message',
dateSend: '2020-08-24T10:00:00.000Z',
},
{
id: 2,
content: 'Test Message',
dateSend: '2020-08-24T14:30:00.000Z',
},
{
id: 3,
content: 'Test Message',
dateSend: '2020-08-25T12:20:00.000Z',
},
{
id: 4,
content: 'Test Message',
dateSend: '2020-08-25T17:00:00.000Z',
},
{
id: 5,
content: 'Test Message',
dateSend: '2020-08-26T21:00:00.000Z',
},
];
Нужно фильтрануть по дате(с учётом времени) и сделать массив с такими объектами сгруппированными по дате:
[
{
date: '24-08-2020',
msg: [
{
id: 1,
content: 'Test Message',
dateSend: '2020-08-24T10:00:00.000Z',
},
{
id: 2,
content: 'Test Message',
dateSend: '2020-08-24T14:30:00.000Z',
},
],
},
{
date: '25-08-2020',
msg: [
{
id: 3,
content: 'Test Message',
dateSend: '2020-08-25T12:20:00.000Z',
},
{
id: 4,
content: 'Test Message',
dateSend: '2020-08-25T17:00:00.000Z',
},
],
},
{
date: '26-08-2020',
msg: [
{
id: 5,
content: 'Test Message',
dateSend: '2020-08-26T21:00:00.000Z',
},
],
},
];
Без lodash и _
Ответы (1 шт):
Автор решения: nörbörnën
→ Ссылка
const data = [
{
id: 1,
content: 'Test Message',
dateSend: '2020-08-24T10:00:00.000Z',
},
{
id: 2,
content: 'Test Message',
dateSend: '2020-08-24T14:30:00.000Z',
},
{
id: 3,
content: 'Test Message',
dateSend: '2020-08-25T12:20:00.000Z',
},
{
id: 4,
content: 'Test Message',
dateSend: '2020-08-25T17:00:00.000Z',
},
{
id: 5,
content: 'Test Message',
dateSend: '2020-08-26T21:00:00.000Z',
},
];
const reducedData = data.reduce((acc, x) => {
const [ date ] = x.dateSend.split('T');
let group = acc[ date ];
if (!group) {
acc[date] = (group = { date, msg: [] });
}
group.msg.push(x);
return acc;
}, {});
const newData = Object.values(reducedData);
console.log(newData)