Creating an array of cumulative sum in javascript
This is an example of what I need to do:
var myarray = [5, 10, 3, 2];
var result1 = myarray[0];
var result2 = myarray[1] + myarray[0];
var result3 = myarray[2] + myarray[1] + myarray[0];
var result4 = myarray[3] + myarray[2] + myarray[1] + myarray[0];
so all that would output 5, 15, 18, 20
but instead of writing out all the vars like that, I want it to say something like:
var result = arrayitem + the sum of any previous items
Does that make sense? Is that possible? How do I do that?
An elegant solution copied from Nina Scholz, using currying to access the previous value.
const cumulativeSum = (sum => value => sum += value)(0);
console.log([5, 10, 3, 2].map(cumulativeSum));
cumulativeSum
is the function value => sum += value
, with sum
initialized to zero. Every time it's called, sum
is updated and will equal the previous value (output[n-1]) when called the next time (with input[n]).
Javascript's reduce
provides the current index, which is useful here:
var myarray = [5, 10, 3, 2];
var new_array = [];
myarray.reduce(function(a,b,i) { return new_array[i] = a+b; },0);
new_array // [5, 15, 18, 20]