From API, I get array of attendances by date with members data. My task is to convert that data to array of objects with clients data end attend_date. I managed to accomplish that in following snippet. My plea to You is for hint for other, perhaps more performant or more elegant way for solving my task.
const attendances = [
{ _id: '1',
attend_date: '2020-12-31',
members: [{_id: '1', client: '1', present: true}, {_id: '2', client: '2', present: true}, {_id: '3', client: '3', present: true}]
},
{_id: '2',
attend_date: '2021-01-01',
members: [{_id: '1', client: '1', present: true}, {_id: '2', client: '2', present: true}, {_id: '3', client: '3', present: true}]
},
{_id: '3',
attend_date: '2021-01-04',
members: [{_id: '1', client: '1', present: true}, {_id: '2', client: '2', present: true}, {_id: '3', client: '3', present: true}]
}
]
const mapAttendances = () => {
let obj,
arr = [];
for (let i = 0; i < attendances.length; i++) {
for (let j = 0; j < attendances[i].members.length; j++) {
obj = {
date: attendances[i].attend_date,
present: attendances[i].members[j].present,
client: attendances[i].members[j].client,
};
arr.push(obj);
}
}
return arr;
}
console.log(mapAttendances())Advertisement
Answer
You can also do this with some nested maps and a little destructuring
const attendances = [
{ _id: '1',
attend_date: '2020-12-31',
members: [{_id: '1', client: '1', present: true}, {_id: '2', client: '2', present: true}, {_id: '3', client: '3', present: true}]
},
{_id: '2',
attend_date: '2021-01-01',
members: [{_id: '1', client: '1', present: true}, {_id: '2', client: '2', present: true}, {_id: '3', client: '3', present: true}]
},
{_id: '3',
attend_date: '2021-01-04',
members: [{_id: '1', client: '1', present: true}, {_id: '2', client: '2', present: true}, {_id: '3', client: '3', present: true}]
}
]
const mapAttendances = () => {
return attendances.flatMap(({attend_date:date, members}) => {
return members.map(({_id,...r}) => ({ date,...r }));
});
}
console.log(mapAttendances())