Трасформировать многомерный массив с объектами в многомерный объект с объектами, внутри которых распологаются массивы
Мне необходимо получить обЪект следующего вида
{
2019: {
11: [массив событий],
12: [массив событий],
}
2020: {
10: [массив событий],
11: [массив событий],
12: [массив событий],
}
}
Я реализую следующий код (как водится, неправильный):
let events = [
{
date: '2019-12',
event: 'name1'
},
{
date: '2019-12',
event: 'name2'
},
{
date: '2019-11',
event: 'name3'
},
{
date: '2019-11',
event: 'name4'
},
{
date: '2020-10',
event: 'name5'
},
{
date: '2020-10',
event: 'name6'
},
{
date: '2020-11',
event: 'name5'
},
{
date: '2020-11',
event: 'name6'
},
{
date: '2020-12',
event: 'name7'
},
{
date: '2020-12',
event: 'name8'
},
{
date: '2020-12',
event: 'name9'
},
]
let result = {};
for (const obj of events) {
if (!result[obj.date.slice(0,4)]) {
result[obj.date.slice(0,4)] = [];
}
result[obj.date.slice(0,4)].push(obj.event);
}
console.log(result)
ALERT Мне не особо нужно готовое решение. Мне больше нужны указания на ошибки моём алгоритме создания многомерного объекта. У меня с ними проблемы. Практически на всех учебных сайтах даются простые примеры, логику формирования которых я понимаю, но как дело доходит до создания чего-то своего - я теряюсь( Мне интересен сам алгоритм создания по ступеням) Не минусите плиз. А то я так никогда с объектами (да и с многомерными массивами) не разбирусь). Заранее благодарю.
Ответы (1 шт):
Автор решения: ksa
→ Ссылка
Мне необходимо получить обЪект следующего вида
Предложу такой вариант решения задачки...
const events = [
{
date: '2019-12',
event: 'name1'
},
{
date: '2019-12',
event: 'name2'
},
{
date: '2019-11',
event: 'name3'
},
{
date: '2019-11',
event: 'name4'
},
{
date: '2020-10',
event: 'name5'
},
{
date: '2020-10',
event: 'name6'
},
{
date: '2020-11',
event: 'name5'
},
{
date: '2020-11',
event: 'name6'
},
{
date: '2020-12',
event: 'name7'
},
{
date: '2020-12',
event: 'name8'
},
{
date: '2020-12',
event: 'name9'
},
]
const result = events.reduce((obj, o) => {
const [y, m] = o.date.split('-')
obj[y] ??= {}
obj[y][m] ??= []
obj[y][m].push(o.event)
return obj
}, {})
console.log(result)