dataByDrink = {
const drinks = Array.from(colors.keys());
const keySuffices = ["_excise_duty", "_bulk_litre"];
function initialiseDateObj() {
const obj = {};
const emptyDrinkObj = keySuffices.reduce((acc, key) => {
acc[changeCase.camelCase(key)] = 0;
return acc;
}, {});
drinks.forEach((drink) => {
obj[drink] = { ...emptyDrinkObj };
});
return obj;
}
function sumData(dataObj, rawData) {
const obj = { ...dataObj };
drinks.forEach((drink) => {
keySuffices.forEach((suffix) => {
if (obj[drink]) {
obj[drink][changeCase.camelCase(suffix)] +=
rawData[`${drink.toLowerCase()}${suffix}`];
}
});
});
return obj;
}
const dataByDate = rows.reduce((acc, d) => {
const { date } = d;
if (acc[date] === undefined) {
acc[date] = { date, ...initialiseDateObj() };
}
acc[date] = { ...sumData(acc[date], d) };
return acc;
}, {});
let flattenedByDate = Object.keys(dataByDate).map((k) => dataByDate[k]);
flattenedByDate = flattenedByDate.map((d) => {
const onDate = { ...d };
drinks.forEach((drink) => {
d[drink].standardLitre = d[drink].bulkLitre * abvs.get(drink);
});
return onDate;
});
return flattenedByDate;
}