Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 687
Shonna Avatar asked Dec 09 '13 17:12

Shonna


People also ask

How do you do a cumulative sum in JavaScript?

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]).

What is cumulative sum in array?

A cumulative sum array is one whose value at each index is the sum of all previous indexes plus itself (e.g., [1,2,3,4] becomes [1,3,6,10] ). While doing multiple range updates, all we need is to put start & end identifiers in the array for each update and, at the end, sum them all together.

How do you sum an array in JavaScript?

To get the sum of an array of numbers:Use the Array. reduce() method to iterate over the array. Set the initial value in the reduce method to 0 . On each iteration, return the sum of the accumulated value and the current number.

What is cumulative sum example?

The definition of the cumulative sum is the sum of a given sequence that is increasing or getting bigger with more additions. The real example of a cumulative sum is the increasing amount of water in a swing pool. Example: Input: 10, 15, 20, 25, 30. Output: 10, 25, 45, 70, 100.


2 Answers

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]).

like image 115
JollyJoker Avatar answered Sep 25 '22 09:09

JollyJoker


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] 
like image 35
Matt Avatar answered Sep 21 '22 09:09

Matt