我有一个包含以下值的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);
});
你能帮我解决这个问题吗?谢谢!
答案 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);