从在JavaScript数组和值(Sum values from an Array in JavaS

2019-08-31 09:02发布

我已经定义了一个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