How can I transform this array
dataJson = [
{ name: 'Indicator1', date: '2022-01-31', data: 4.85 },
{ name: 'Indicator2', date: '2022-01-31', data: 6.00 },
{ name: 'Indicator3', date: '2022-01-31', data: 14.85 },
{ name: 'Indicator1', date: '2022-03-31', data: 10.50 },
{ name: 'Indicator2', date: '2022-03-31', data: 21.00 }
]
to this form
seriesData = [
{ name: 'Indicator1', data: [4.85, 10.50]},
{ name: 'Indicator2', data: [6.00, 21.00]},
{ name: 'Indicator3', data: [14.85]}
]
I suspect I can use dataJson.reduce() but I don't know how. Any idea? Thanks
You can use array#reduce to group based on name in an object accumulator.
const dataJson = [ { name: 'Indicator1', date: '2022-01-31', data: 4.85 }, { name: 'Indicator2', date: '2022-01-31', data: 6.00 }, { name: 'Indicator3', date: '2022-01-31', data: 14.85 }, { name: 'Indicator1', date: '2022-03-31', data: 10.50 }, { name: 'Indicator2', date: '2022-03-31', data: 21.00 } ],
result = Object.values(dataJson.reduce((r, {name, data}) => {
r[name] ??= {name, data: []};
r[name].data.push(data);
return r;
},{}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }