So I have found a solution, but I am still learning and feel like my solution is too long. It does not use all of ES6 and could be better. I would love any feedback and/or suggestions.
The data looks like this:
const formattedWorkbook =
[
{
"year": 2016,
"mainHeaderEnglish": "Pearls of Wisdom",
"categoryCode": 3,
},
{
"year": 2017,
"mainHeaderEnglish": "VENuS Satellite",
"categoryCode": 2,
},
{
"year": 2017,
"mainHeaderEnglish": "Hope for millions",
"categoryCode": 1,
},
{
"year": 2012,
"mainHeaderEnglish": "green electricity Pioneer",
"categoryCode": 2
}
]
The data needs to look like this:
const formattedWorkbook =
[
{
"year": 2016,
"value: [
{"mainHeaderEnglish": "Pearls of Wisdom", "categoryCode": 3,}
]
},
{
"year": 2017,
"value":[
{"mainHeaderEnglish": "VENuS Satellite", "categoryCode": 2},
{"mainHeaderEnglish": "Hope for millions", "categoryCode": 1}
]
},
{
"year": 2012,
"value": [
{"mainHeaderEnglish": "green electricity Pioneer", "categoryCode": 2}
]
}
]
This is my solution that works, but I think it could be a lot better:
let transformedWorkbook = formattedWorkbook.map(function (obj) {
const result = {
year: obj.year,
value: []
}
for (let year in obj) {
if (obj.hasOwnProperty(year) && year !== "year") {
result.value.push({ [year]: obj[year] });
}
}
result.value = [Object.assign({}, ...result.value)]
return result;
});
const newWorkbook = new Map(transformedWorkbook.map(({ year, value }) => [year, { year, value: [] }]));
for (let { year, value } of transformedWorkbook) {
newWorkbook.get(year).value.push(...[value].flat())
};
console.log([...newWorkbook.values()]);