有没有更简单的方法来创建数组中先前值的总和?

时间:2018-04-02 13:14:15

标签: javascript ecmascript-6

我基本上是在寻找一种更简单的方法:

heights.forEach((height, i) => {
    var p = i > 0 ? i -1  : 0;
    this.breakingPoints.push(height+heights[p])
})

如果我输入的数组是:

[0,2,5,5]

我想输出

[0,2,7,12]

4 个答案:

答案 0 :(得分:9)

您可以使用带有闭包的map()方法返回新数组。



const arr = [0,2,5,5];
const result = (s => arr.map(e => s += e))(0);
console.log(result)




答案 1 :(得分:1)

您可以简单地存储变量以推入一个变量,该变量允许您自动将新值与其相加而不检查索引。

var total = 0;
heights.forEach(height => {
    this.breakingPoints.push(total += height);
})

结果将是:

[0, 2, 7, 12]

答案 2 :(得分:0)

您可以使用forum post方法。

let inputArray = [1, 2, 3, 4];
let outputArray = [];
inputArray.reduce(function(accumulator, currentValue, currentIndex) { 
  return outputArray[currentIndex] = accumulator + currentValue; }, 0);

答案 3 :(得分:0)

您可以使用reduce和spread运算符来连接值:

const input = [0, 2, 5, 5];
const output = input.reduce((acc, val) => [...acc, (acc[acc.length - 1] ? acc[acc.length - 1] : 0) + val],[]);

或者使用< ES6

var output = input.reduce(function (acc, val) { return acc.concat([(acc[acc.length - 1] ? acc[acc.length - 1] : 0) + val]); }, []);