[英]How to sum the each number with the numbers before (JavaScript)?
I have this array of numbers in JS code:我在 JS 代码中有这个数字数组:
var arrOf12Numbers = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120];
I need to sum the each number with the numbers before.我需要将每个数字与之前的数字相加。
var cumulative12ArrOfNumbers = [10, 30, 60, 100, 150, 210, etc to 11 index... ];
What is the best way to do that in JS?在 JS 中做到这一点的最佳方法是什么?
UPD : I'm newbie in JS UPD :我是 JS 新手
You could use Array#map
and return the sum of the item and the last sum.您可以使用
Array#map
并返回项目和最后一个总和的总和。
This proposal does not alter the original array.这个提议不会改变原始数组。
var array = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120], result = array.map(function (a) { return this.last += a; }, { last: 0 }); console.log(result);
A version without thisArg
and a closure没有
thisArg
和闭包的版本
var array = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120], result = array.map(function (last) { return function (a) { return last += a; }; }(0)); console.log(result);
ES6 ES6
var array = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120], result = array.map((last => a => last += a)(0)); console.log(result);
Simple and fast solution using a regular for
loop(without any functions):使用常规
for
循环的简单快速解决方案(没有任何功能):
var arrOf12Numbers = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]; for (var i = 0, len = arrOf12Numbers.length; i < len; i++) { if (i > 0) arrOf12Numbers[i] = arrOf12Numbers[i] + arrOf12Numbers[i - 1]; } console.log(arrOf12Numbers);
And it's more than 2 times faster than approach with map()
function(if you care about performance)它比使用
map()
函数的方法快2 倍以上(如果你关心性能)
To get result as a new array use the following approach:要将结果作为新数组使用以下方法:
var arrOf12Numbers = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120], result = arrOf12Numbers.slice(); for (var i = 0, len = result.length; i < len; i++) { if (i > 0) result[i] = result[i] + result[i - 1]; } console.log(result);
The second apprroach is still about 2 times faster than map()
function approach第二种方法仍然比
map()
函数方法快大约 2 倍
This will do the work without altering the original array.这将在不改变原始数组的情况下完成工作。 You just have to pass your original array to the function.
您只需要将原始数组传递给该函数。
var arrOf12Numbers = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]; var myFunc = function(arrOf12Numbers) { var cumulative12ArrOfNumbers = []; cumulative12ArrOfNumbers[0] = arrOf12Numbers[0]; for(i=1; i<arrOf12Numbers.length; i++) { cumulative12ArrOfNumbers[i] = arrOf12Numbers[i-1] + arrOf12Numbers[i]; } console.log(cumulative12ArrOfNumbers); }; myFunc(arrOf12Numbers);
This might help you.这可能对你有帮助。
var arrOf12Numbers = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]; var result = []; var sum = 0; arrOf12Numbers.forEach(function (val, key) { sum += val; result.push(sum); }); console.log(result);
var arr = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120];
for (var i = 1; i < arr.length; i++) {
sum = arr[i] + arr[i-1];
arr[i] = sum;
}
It's not really so complicated, just a loop;其实没那么复杂,只是一个循环;
var arrOf12Numbers = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]; var output = [], sum; for (var i = 0; i < arrOf12Numbers.length;i++) { output.push(i === 0 ? arrOf12Numbers[i] : output[i-1] + arrOf12Numbers[i]) } console.log(output);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.