I have this original array that i need to transform into the one named original.
const data = [ {
end_date: "2020-01-31"
invoices_count: 22
month: "2020-01"
start_date: "2020-01-01"
total_margin: 1000
total_revenue: 1000
},
{
end_date: "2020-02-29"
invoices_count: 14
month: "2020-02"
start_date: "2020-02-01"
total_margin: 2000
total_revenue: 2000
}]
i need to accumulate the total_margin and total_revenue over time, so that the result is equal to the previous month + current month value, so the resulting array will look like this :
const result = [ {
end_date: "2020-01-31"
invoices_count: 22
month: "2020-01"
start_date: "2020-01-01"
total_margin: 1000
total_revenue: 1000
},
{
end_date: "2020-02-29"
invoices_count: 14
month: "2020-02"
start_date: "2020-02-01"
total_margin: 3000
total_revenue: 3000
}]
I wrote this function to do this, but its modifying the first value in the array as well( total_margin & total_margin at index 0 ) , and the numbers don't really add up to the correct value, i am not sure what i am doing wrong
export const getCumulativeValueMonth = (data: MonthlyRevenue[]): MonthlyRevenue[] => {
const orderedData = _.orderBy(data, (o) => Date.parse(o.start_date), ['asc']);
const accumulated = orderedData.map((x, i) => ({
start_date: x.start_date,
end_date: x.end_date,
invoices_count: x.invoices_count,
month: x.month,
total_margin: data
.slice(0, i + 1)
.map(({ total_margin }) => total_margin)
.reduce((z, y) => z + y),
total_revenue: data
.slice(0, i + 1)
.map(({ total_revenue }) => total_revenue)
.reduce((z, y) => z + y),
}));
return accumulated;
};
Any ideas what i did wrong?
Thank you!