Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有更简单的方法来创建数组中先前值的总和?_Javascript_Ecmascript 6 - Fatal编程技术网

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

Javascript 有没有更简单的方法来创建数组中先前值的总和?,javascript,ecmascript-6,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] 您可以简单地存储变量以推入一个变量,该变量将允许您在不检查索引的情况下自动对新值求和 var total = 0; heights.forEa

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

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]

您可以简单地存储变量以推入一个变量,该变量将允许您在不检查索引的情况下自动对新值求和

var total = 0;
heights.forEach(height => {
    this.breakingPoints.push(total += height);
})
结果将是:

[0, 2, 7, 12]
您可以使用带有闭包的
map()
方法返回新数组

const arr=[0,2,5,5];
const result=(s=>arr.map(e=>s+=e))(0);
console.log(结果)
您可以使用该方法


您可以使用“减少和扩展”操作符来计算值:

const input = [0, 2, 5, 5];
const output = input.reduce((acc, val) => [...acc, (acc[acc.length - 1] ? acc[acc.length - 1] : 0) + val],[]);
或当使用
var output = input.reduce(function (acc, val) { return acc.concat([(acc[acc.length - 1] ? acc[acc.length - 1] : 0) + val]); }, []);

对我来说,这看起来非常简单和直接。我花了一些时间来理解为什么s=>…(0)会出现,但我想这只是将s声明为临时变量。我喜欢这个简单的一行解决方案。但是对于任何不理解
(s=>..)(0)
部分的人来说,基本上这与使用
var s=0
作为临时变量,然后在
.map()
函数中使用它是一样的。我认为reduce output是一个单一的值?是的,但要研究回调方法。在那里,它正在更新每个索引上的输出数组。
var output = input.reduce(function (acc, val) { return acc.concat([(acc[acc.length - 1] ? acc[acc.length - 1] : 0) + val]); }, []);