Javascript中数组中先前元素的总和

Ors*_*rsi 0 javascript jquery

我有一个包含以下值的javascript数组:

fbDivHeightsTest = [280,430,408,430,408] 
Run Code Online (Sandbox Code Playgroud)

我需要一个新的数组,其元素总和如下:

newArray = [280, 710, 1118, 1548, 1956]. 
Run Code Online (Sandbox Code Playgroud)

fbDivHeightsTest[0] + fbDivHeightsTest[1], fbDivHeightsTest[0] + fbDivHeightsTest[1] + fbDivHeightsTest[2]等.

我试过这样,但reduce函数没有返回我期望的结果.它返回:280,710,1398,2818,5614

sectionsSeclector.each(function(index, item) {    
    var sum = fbDivHeights.reduce(function(a, b) { return a + b; }, 0);
    fbDivHeights.push( $(item).outerHeight() + sum);       
});  
Run Code Online (Sandbox Code Playgroud)

你能帮我解决这个问题吗?谢谢!

Nin*_*olz 6

您可以在实际总和上使用闭包并映射递增的结果.

工作原理:

假设函数被调用,那么

(s => a => s += a)(0)
//                 ^  value for s
Run Code Online (Sandbox Code Playgroud)

它返回

a => s += a      // s = 0
Run Code Online (Sandbox Code Playgroud)

对于Array#map每个循环的回调,

280 => s += 280  // s =  280
430 => s += 430  // s =  710
408 => s += 408  // s = 1118
430 => s += 430  // s = 1548
408 => s += 408  // s = 1956
Run Code Online (Sandbox Code Playgroud)

var array =[280, 430, 408, 430, 408],
    result = array.map((s => a => s += a)(0));
    
console.log(result);
Run Code Online (Sandbox Code Playgroud)

  • 我只是不明白 (2认同)

Mih*_*nut 5

您可以将reduce方法与map方法结合使用.

reduce()方法对累加器array(从左到右)中的每个元素应用函数以减少单个值.

let array = [280,430,408,430,408];
array = array.map((elem, index) => array.slice(0,index + 1).reduce((a, b) => a + b));
console.log(array);
Run Code Online (Sandbox Code Playgroud)

您也可以只使用map方法.

let array = [280,430,408,430,408],sum;
array = array.map(elem => sum = (sum || 0) + elem);
console.log(array);
Run Code Online (Sandbox Code Playgroud)