i have bellow json format
const datalist = [{"Week":"01","Apple":8,"Orange":1},
{"Week":"02","Orange":9,"Apple":1},
{"Week":"03","Apple":10,"Orange":0}];
i want to convert into bellow format
const datalist = [{"Food":"Apple","Week 1":8,"Week 2":1, "Week 3": 10, "Total" : 19},
{"Food":"Orange","Week 1":0,"Week 2":9, "Week 3": 0, "Total" :10 }];
i used bellow logic but im not able to get the correct result also the total
const convert = toConvert => {
const map = toConvert.reduce((r, {Week, Apple, Orange}) => {
if (r.has(Week))
r.set(Week, {...r.get(Week), [Apple]: Orange});
else
r.set(Week, {Week, [Apple]: Orange});
return r;
}, new Map());
return [...map.values()];
};
console.log(convert(datalist));
>Solution :
Just iterate through array of fruits
like this:
const datalist = [{"Week":"01","Apple":8,"Orange":1},
{"Week":"02","Orange":9,"Apple":1},
{"Week":"03","Apple":10,"Orange":0}];
const fruits = datalist.map(f => Object.keys(f).filter(k => k !== "Week"))[0];
let newData = fruits.map((f) => {
let data = {};
let total = 0;
data['Food'] = f;
datalist.forEach((d)=>{
data[`Week ${parseInt(d['Week'])}`] = d[f];
total += d[f];
});
data['Total'] = total;
return data;
});
console.log(newData);