Отфильтровать массив объектов по датам

Есть массив объектов например:

[
  {
    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)

→ Ссылка