来自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