Creating an array of cumulative sum in javascript

后端 未结 21 1644
时光取名叫无心
时光取名叫无心 2020-11-27 06:23

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         


        
21条回答
  •  夕颜
    夕颜 (楼主)
    2020-11-27 07:14

    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:

    • The first cycle:
      • past_sums.slice(-1) === []
      • 1*past_sums.slice(-1) === 0
    • All but the last cycle:
      • cumsum returns [past_sums and new_sum] as next cycle's past_sums
    • The last cycle:
      • cumsum returns [5, 15, 18, 20] as the output Array some_sums

    It can be written with fewer lines:

    var 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, []);
    

提交回复
热议问题