我有一个包含以下值的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)
你能帮我解决这个问题吗?谢谢!
您可以在实际总和上使用闭包并映射递增的结果.
工作原理:
假设函数被调用,那么
Run Code Online (Sandbox Code Playgroud)(s => a => s += a)(0) // ^ value for s它返回
Run Code Online (Sandbox Code Playgroud)a => s += a // s = 0对于
Array#map每个循环的回调,Run Code Online (Sandbox Code Playgroud)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);Run Code Online (Sandbox Code Playgroud)
您可以将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)
| 归档时间: |
|
| 查看次数: |
796 次 |
| 最近记录: |