我已经定义了一个JavaScript变量称为myData
是一个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]);
我想知道是否有可能总结在数组中发现的数值(例如:0 + 0 + 21 + 2 + 0等),并有可能是一个与我可以使用脚本标记,因为外面的结果变量我有这种对应每个白天在一周的阵列的7。 我想以后做基于一个比较。 这是这个样的行动,如果有可能的最优选的方法?
Answer 1:
请尝试以下
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
Answer 2:
您可以使用Array.reduce
方法:
const myData = [ ['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] ]; const sum = myData .map( v => v[1] ) .reduce( (sum, current) => sum + current, 0 ); console.log(sum);
见MDN
Answer 3:
我认为,最简单的方法可能是:
values.reduce(function(a, b){return a+b;})
Answer 4:
我会用减少
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
Answer 5:
创建和方法将很好地工作,例如,你可以添加和功能阵列
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
Answer 6:
或ES6
values.reduce((a, b) => a + b),
例:
[1,2,3].reduce((a, b)=>a+b) // return 6
Answer 7:
如果你想在同一时间为求和丢弃数组,你可以这样做(比如, stack
是数组):
var stack = [1,2,3],
sum = 0;
while(stack.length > 0) { sum += stack.pop() };
Answer 8:
您可以使用阵列的本地地图方法。 图方法(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; });
一个是你的结果
Answer 9:
内置减少对数组JavaScript是不是一个标准,但你可以使用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);
对于你的情况。 看看这个小提琴也。
Answer 10:
旧的方式(如果你不知道现在的参数/参数的长度)
>> 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
文章来源: Sum values from an Array in JavaScript