来自JavaScript中数组的Sum值

我定义了一个名为myData的JavaScriptvariables,它是一个像这样的new Array

 var myData = new Array(['2013-01-22', 0], ['2013-01-29', 0], ['2013-02-05', 0], ['2013-02-12', 0], ['2013-02-19', 0], ['2013-02-26', 0], ['2013-03-05', 0], ['2013-03-12', 0], ['2013-03-19', 0], ['2013-03-26', 0], ['2013-04-02', 21], ['2013-04-09', 2]); 

我想知道是否有可能总结在数组中find的数字值(例如0 + 0 + 21 + 2 + 0等等),并可能有一个variables,结果我可以在脚本标记之外使用,因为我有7个这样的arrays对应于每周的每一天。 我想在此基础上做一个比较。 如果可能的话,这是最适合这种行为的首选方法吗?

尝试以下

 var myData = [['2013-01-22', 0], ['2013-01-29', 1], ['2013-02-05', 21]]; var myTotal = 0; // Variable to hold your total for(var i = 0, len = myData.length; i < len; i++) { myTotal += myData[i][1]; // Iterate over your first array and then grab the second element add the values up } document.write(myTotal); // 22 in this instance 

你可以使用Array.reduce方法:

 var sum = myData.reduce( function(sum, current){ return sum + current[1]; }, 0 ); 

请参阅MDN

我认为最简单的方法可能是:

 values.reduce(function(a, b){return a+b;}) 

创buildsum方法可以很好地工作,例如可以将sum函数添加到Array

 Array.prototype.sum = function(selector) { if (typeof selector !== 'function') { selector = function(item) { return item; } } var sum = 0; for (var i = 0; i < this.length; i++) { sum += parseFloat(selector(this[i])); } return sum; }; 

那么你可以做

 > [1,2,3].sum() 6 

和你的情况

 > myData.sum(function(item) { return item[1]; }); 23 

编辑:扩展内置可以被压在一起,因为如果每个人都这样做,我们会意外地覆盖对方(命名空间冲突)。 你可以将sum函数添加到某个模块,并且接受一个数组作为参数(如果你喜欢的话)。 这可能意味着将签名更改为myModule.sum = function(arr, selector) {然后this将成为arr

我会用减less

 var myData = new Array(['2013-01-22', 0], ['2013-01-29', 0], ['2013-02-05', 0], ['2013-02-12', 0], ['2013-02-19', 0], ['2013-02-26', 0], ['2013-03-05', 0], ['2013-03-12', 0], ['2013-03-19', 0], ['2013-03-26', 0], ['2013-04-02', 21], ['2013-04-09', 2]); var sum = myData.reduce(function(a, b) { return a + b[1]; }, 0); $("#result").text(sum); 

在jsfiddle上可用

或在ES6

values.reduce((a, b) => a + b),

例:

 [1,2,3].reduce((a, b)=>a+b) // return 6 

如果你想在总结的同时丢弃数组,你可以做(​​比如, stack是数组):

 var stack = [1,2,3], sum = 0; while(stack.length > 0) { sum += stack.pop() }; 

您可以使用数组的本地映射方法。 map方法(Array)(JavaScript)

 var myData = new Array(['2013-01-22', 0], ['2013-01-29', 0], ['2013-02-05', 0], ['2013-02-12', 0], ['2013-02-19', 0], ['2013-02-26', 0], ['2013-03-05', 0], ['2013-03-12', 0], ['2013-03-19', 0], ['2013-03-26', 0], ['2013-04-02', 21], ['2013-04-09', 2]); var a = 0; myData.map( function(aa){ a += aa[1]; return a; }); 

a是你的结果

数组的javascript内置减less不是标准,但是可以使用underscore.js:

 var data = _.range(10); var sum = _(data).reduce(function(memo, i) {return memo + i}); 

成为

 var sumMyData = _(myData).reduce(function(memo, i) {return memo + i[1]}, 0); 

为你的情况。 看看这个小提琴也。

旧的方式(如果你现在没有参数/参数的长度)

  >> function sumla1(){ result=0 for(let i=0; i<arguments.length;i++){ result+=arguments[i]; } return result; } >> sumla1(45,67,88); >> 200 

ES6(数组的解构)

 >> function sumla2(...x){return x.reduce((a,b)=>a+b)} >> >> sumla2(5,5,6,7,8) >> >> 31 >> >> var numbers = [4, 9, 16, 25]; >> sumla2(...numbers); >> 54