我有一个数组:
arr = [50,80,100,180,30]
我需要一个新的数组,如下:
newArr = [50,130,230,410,440]
解决方法:
① 在实际总和上使用闭包并映射递增的结果(数组中当前元素等于先前元素的总和)
let arr = [50,80,100,180,30];
let newArr = arr.map((s => a => s += a)(0));
console.log(newArr); //[50, 130, 230, 410, 440]
工作原理:
假设函数被调用,那么
(s => a => s += a)(0)
// ^ value for s
它返回
a => s += a // s = 0
对于Array#map每个循环的回调,
50 => s += 50 // s = 50
80 => s += 80 // s = 130
100 => s += 100 // s = 230
180 => s += 180 // s = 410
30 => s += 30 // s = 440
② 使用 map方法
let arr = [50,80,100,180,30],sum;
let newArr = arr.map(elem => sum = (sum || 0) + elem);
console.log(newArr); //[50, 130, 230, 410, 440]
③ 将reduce方法与map方法结合使用. 该reduce()方法对累加器和array(从左到右)中的每个元素应用函数以将其减少为单个值.
let arr = [50,80,100,180,30];
let newArr = arr.map((elem, index) => arr.slice(0,index + 1).reduce((a, b) => a + b));
console.log(newArr); //[50, 130, 230, 410, 440]