Reputation: 33
I currently have a json array structured like this:
[{"id": 1, "meeting": "1/3/2015 12:30:00 PM", "name": "John"},
{"id": 1, "meeting": "1/3/2015 13:30:00 PM"}, "name": "John"},
{"id": 2, "meeting": "1/5/2015 7:00:00 AM"}, "name": "Peter"},
{"id": 2, "meeting": "1/5/2015 8:00:00 AM"}, "name": "Peter"}]
How can I change the structure of my array to look like this?
[ {"id": 1, "name": "John", "meeting": [{"Time": "1/3/2015 12:30:00 PM", "Time": "1/3/2015 13:30:00 PM"}]},
{"id": 2, "name": "Peter", "meeting": [{"Time": "1/5/2015 7:00:00 AM", "Time": "1/5/2015 8:00:00 AM"}]}]
Upvotes: 2
Views: 323
Reputation: 44107
You should use Array.prototype.reduce
:
const data = [{"id": 1, "meeting": "1/3/2015 12:30:00 PM", "name": "John"}, {"id": 1, "meeting": "1/3/2015 13:30:00 PM", "name": "John"}, {"id": 2, "meeting": "1/5/2015 7:00:00 AM", "name": "Peter"}, {"id": 2, "meeting": "1/5/2015 8:00:00 AM", "name": "Peter"}];
//I fixed a typo in the above array
const merged = data.reduce((acc, { id, meeting, name }) => {
if (acc.some(e => e.id == id)) {
acc.find(e => e.id == id).meeting.push(meeting);
} else {
acc.push({ "id": id, "name": name, "meeting": [meeting]});
}
return acc;
}, []);
console.log(merged);
Upvotes: 1