Dan*_*uva 50 javascript arrays for-loop sum
我已经定义了一个名为的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]);
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以对数组中找到的数值求和(例如0 + 0 + 21 + 2 + 0等),并且可能有一个变量,结果是我可以在脚本标记之外使用,因为我有7种这样的阵列对应于一周中的每一天.我想基于此进行比较.如果可能的话,这是采取这种行动的最佳方法吗?
Koo*_*Inc 100
你可以使用这个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);Run Code Online (Sandbox Code Playgroud)
见MDN
ruh*_*art 54
我认为最简单的方法可能是:
values.reduce(function(a, b){return a+b;})
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 18
请尝试以下方法
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 instanceRun Code Online (Sandbox Code Playgroud)
Xot*_*750 13
我会用reduce
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);
Run Code Online (Sandbox Code Playgroud)
lee*_*man 12
创建sum方法可以很好地工作,例如,您可以将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;
};
Run Code Online (Sandbox Code Playgroud)
那么你可以做到
> [1,2,3].sum()
6
Run Code Online (Sandbox Code Playgroud)
在你的情况下
> myData.sum(function(item) { return item[1]; });
23
Run Code Online (Sandbox Code Playgroud)
编辑:扩展内置类型可能不受欢迎,因为如果每个人都这样做,我们会意外地相互覆盖(命名空间冲突).您可以将sum函数添加到某个模块,并根据需要接受数组作为参数.这可能意味着更改签名,myModule.sum = function(arr, selector) {然后this将成为arr
或者在ES6中
values.reduce((a, b) => a + b),
例:
[1,2,3].reduce((a, b)=>a+b) // return 6
Run Code Online (Sandbox Code Playgroud)