Добрый день, сделал функционал для того что бы заказы групировали по датам, но как по мне получилось достаточно сложно. Может есть идеи как можно сделать более легко?
1) Получаю данные
let { Orders = [] } = data
2) Создаю функцию которая будет по ключу сортировать массивы в один новый масив
const groupBy = (array:any, key:any) => {
return array.reduce((rv:any, x:any) => {
(rv[x[key]] = rv[x[key]] || []).push(x);
return rv
}, {})
}
3) Из базы данных я получаю в формате Date и для правильной группировки прохожусь по массиву переписывая его и создаю новые поля date и dateForm
let MassiveArray = []
Orders = Orders.map((order:any) => ({
...order,
date: new Date(order.created_at).getDate() + monthNames[new Date(order.created_at).getMonth()], // Получаю в формате 7 апреля
dateForm: new Date(order.created_at).getDate() + '.' + new Date(order.created_at).getMonth() // Получаю в формате 7.3 ( так как апрель 4 месяц по счету но счет идет с 0 и поэтому 3 )
}))
MassiveArray = groupBy(Orders, 'dateForm')
4) И массив monthName что бы по индексу получить названия месяца.
И вроде бы все хорошо работает но как мне кажется это костыль, и есть более удобные методы реализовать. Буду рад если опытне специалисты подскажут как можно сделать чуть легче))