I have an array of objects and want to convert it from one format to another format.
the initial array looks like:
const data = [
{name: 'Customer 1', value: {Oil: 55, Gas: 66, Retail: 56}},
{name: 'Customer 2', value: {Oil: 59, Gas: 96, Retail: 86}},
{name: 'Customer 3', value: {Oil: 50, Gas: 69, Retail: 50}}
]how to convert it to a format like this?
const data = [
{channel: 'Oil', 'Customer 1': 55, 'Customer 2': 59, 'Customer 3': 50},
{channel: 'Gas', 'Customer 1': 66, 'Customer 2': 96, 'Customer 3': 69},
{channel: 'Retail', 'Customer 1': 56, 'Customer 2': 86, 'Customer 3': 50},
]any help please?
Advertisement
Answer
You can populate an objected keyed off the value categories and add the relevant data.
const data = [
{name: 'Customer 1', value: {Oil: 55, Gas: 66, Retail: 56}},
{name: 'Customer 2', value: {Oil: 59, Gas: 96, Retail: 86}},
{name: 'Customer 3', value: {Oil: 50, Gas: 69, Retail: 50}}
]
const output = Object.values(data.reduce((a, c) => {
Object.keys(c.value).forEach(k => {
a[k] = a[k] || {channel: k};
a[k][c.name] = c.value[k];
});
return a;
}, {}));
console.log(output);