Как написать функционал на JS, чтобы сгруппировать сотрудников по определенным датам?
Имеется следующий массив данных:
const arr = [
{ id: 111, name: 'Azat', salary: 11000, date: '2020-12-01' },
{ id: 222, name: 'Boris', salary: 120000, date: '2020-11-01' },
{ id: 333, name: 'Valihan', salary: 130000, date: '2020-10-01' },
{ id: 444, name: 'Grigoriy', salary: 140000, date: '2020-09-02' },
{ id: 555, name: 'Diana', salary: 150000, date: '2020-09-01' },
{ id: 666, name: 'Egor', salary: 160000, date: '2020-10-01' },
{ id: 777, name: 'Jandos', salary: 170000, date: '2020-11-01' },
{ id: 888, name: 'Zinaida', salary: 1000000, date: '2020-12-02' },
]
Задача: сгруппировать сотрудников по определенным датам:
obj = {
'2020-12-01': {
111: {
"salary": 11000
},
888: {
"salary": 1000000
}
// ... остальные люди
}
// ... остальные дни
}
Ответы (1 шт):
Автор решения: Qwertiy
→ Ссылка
var arr = [
{ id: 111, name: 'Azat', salary: 11000, date: '2020-12-01' },
{ id: 222, name: 'Boris', salary: 120000, date: '2020-11-01' },
{ id: 333, name: 'Valihan', salary: 130000, date: '2020-10-01' },
{ id: 444, name: 'Grigoriy', salary: 140000, date: '2020-09-02' },
{ id: 555, name: 'Diana', salary: 150000, date: '2020-09-01' },
{ id: 666, name: 'Egor', salary: 160000, date: '2020-10-01' },
{ id: 777, name: 'Jandos', salary: 170000, date: '2020-11-01' },
{ id: 888, name: 'Zinaida', salary: 1000000, date: '2020-12-02' },
]
console.log(arr.reduce(
(r, x) => ((r[x.date] ||= Object.create(null))[x.id] = { salary: x.salary }, r),
Object.create(null)
))
.as-console-wrapper.as-console-wrapper { max-height: 100vh }