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
To keep the cumsum within a function until fully built, I offer this minor variant on Matt's Answer:
var cumsum = function(past_sums, new_value) {
var last_sum = 1*past_sums.slice(-1);
var new_sum = last_sum + new_value;
return past_sums.concat([new_sum]);
}
var some_sums = [5, 10, 3, 2].reduce(cumsum, []);
Here's how it works:
past_sums.slice(-1) === []1*past_sums.slice(-1) === 0cumsum returns [past_sums and new_sum] as next cycle's past_sumscumsum returns [5, 15, 18, 20] as the output Array some_sumsvar cumsum = function(sums, val) {
return sums.concat([ val + 1*sums.slice(-1) ]);
}
var some_sums = [5, 10, 3, 2].reduce(cumsum, []);
With Arrow Functions (Not for ≤IE11 or Opera Mini), I'd write this:
var cumsum = (sums,val) => sums.concat([ val + 1*sums.slice(-1) ]);
var some_sums = [5, 10, 3, 2].reduce(cumsum, []);