51

我已经定义了一个 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 个此类数组对应于一周中的每一天。我想在此基础上进行比较。如果可能的话,那是这种行动的最首选方法吗?

4

12 回答 12

107

您可以使用以下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

于 2013-04-17T10:38:11.067 回答
58

I think the simplest way might be:

values.reduce(function(a, b){return a+b;})
于 2014-12-16T01:15:45.600 回答
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 instance

于 2013-04-17T10:33:32.503 回答
13

我会使用减少

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上可用

于 2013-04-17T10:53:07.940 回答
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;
};

那么你可以做

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

在你的情况下

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

编辑:扩展内置函数可能会不受欢迎,因为如果每个人都这样做,我们会意外地相互覆盖(命名空间冲突)。如果您愿意,可以将 sum 函数添加到某个模块并接受一个数组作为参数。这可能意味着将签名更改为myModule.sum = function(arr, selector) {thenthis将变为arr

于 2014-06-24T01:02:50.460 回答
8

或者在 ES6 中

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

例子:

[1,2,3].reduce((a, b)=>a+b) // return 6
于 2016-10-04T15:00:16.057 回答
2

如果你想在求和的同时丢弃数组,你可以这样做(比如说,stack是数组):

var stack = [1,2,3],
    sum = 0;
while(stack.length > 0) { sum += stack.pop() };
于 2014-02-07T04:24:57.833 回答
1

您可以对数组使用本机 map 方法。 映射方法(数组)(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 是你的结果

于 2015-12-31T03:36:10.913 回答
1

其中 0 是初始值

Array.reduce((currentValue, value) => currentValue +value,0)

或者

Array.reduce((currentValue, value) =>{ return currentValue +value},0)

或者

[1,3,4].reduce(function(currentValue, value) { return currentValue + value},0)
于 2021-01-19T21:18:19.920 回答
0

Arrays 的 javascript 内置 reduce 不是标准,但您可以使用 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);

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

于 2013-11-11T17:35:14.790 回答
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
于 2017-03-06T14:12:00.917 回答
0

使用此代码的新方法

  <script>
var array = [1, 2, 3, 4, 5];

// Getting sum of numbers
var sum = array.reduce(function(a, b){
    return a + b;
}, 0);

console.log(sum);
于 2021-10-06T12:21:52.407 回答