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

时间:2017-11-03 11:57:21

标签: javascript jquery

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

fbDivHeightsTest = [280,430,408,430,408] 

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

newArray = [280, 710, 1118, 1548, 1956]. 

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);       
});  

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

6 个答案:

答案 0 :(得分:6)

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

  

工作原理

     

假设调用该函数,则

(s => a => s += a)(0)
//                 ^  value for s
     

它返回

a => s += a      // s = 0
     

用于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



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




答案 1 :(得分:5)

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

reduce()方法针对累加器应用函数,并将array中的每个元素(从左到右)应用于 reduce 一个单个值。

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);

您也可以只使用map方法。

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

答案 2 :(得分:2)

javascript reduce()函数可以轻松完成这项工作: -

var fbDivHeightsTest = [280,430,408,430,408] 
var new_array = [];
fbDivHeightsTest.reduce(function(a,b,i) { return new_array[i] = a+b; },0);
console.log(new_array);

答案 3 :(得分:1)

只需使用array.reduce:

var fbDivHeightsTest = [280,430,408,430,408] ;
var res = fbDivHeightsTest.reduce((m, o, i) => {
  var prev = m[i - 1];
  if (prev) {
    o = o + prev;
  } 
  m.push(o);
  return m;
}, []);
console.log(res);

答案 4 :(得分:1)

reduce()(有时也称为折叠)方法旨在将数组“减少”为单个值(尽管该单个值可以是对象或列表)

在你的例子中,你不想要一个列表的总和,但是你想要为初始arrray中的每个值映射(1:1),这是这一点的值的总和:

let array = [280,430,408,430,408];
let _sum = 0;
let sums = array.map(value => _sum += value);

console.log(sums);

或者如上所述,您将一个列表减少到另一个列表:

let array = [280, 430, 408, 430, 408];
let sums = array.reduce((results, value, index) => {
  let previousSum = index>0? results[index-1]: 0;
  results.push(previousSum + value);
  
  return results;
}, []);

console.log(sums);

其中results是中间结果

答案 5 :(得分:1)

又一个减速机;)

const cumulative = [280,430,408,430,408]
       .reduce( (p, n) => p.concat((+p.slice(-1) || 0) + n), []);
 
console.log(cumulative);

相关问题