Somme des valeurs d'un tableau en JavaScript

J'ai défini une variable JavaScript appelée myData qui est un new Array comme ceci:

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]);

Je me demande s'il est possible de additionner les valeurs numériques trouvées dans le tableau (ex. 0+0+21+2+0 et ainsi de suite) et ont probablement une variable avec le résultat que je peux l'utiliser en dehors de la balise de script parce que j'ai 7 de ce type de tableaux correspondants pour chaque jour de la semaine. Je veux faire une comparaison après cela. C'est la méthode choisie pour ce genre de mesures si est-il possible?

49
demandé sur Mark Walters 2013-04-17 14:28:46

10 réponses

Essayez ce qui suit

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
18
répondu Mark Walters 2015-05-11 10:03:46

Vous pouvez utiliser la méthode Array.reduce:

var sum = myData.reduce(
           function(sum, current){
             return sum + current[1];
           }, 0
         );

Voir MDN

93
répondu KooiInc 2016-06-04 11:18:21

Je pense que le moyen le plus simple pourrait être:

values.reduce(function(a, b){return a+b;})
53
répondu ruhanbidart 2014-12-16 01:15:45

Je voudrais utiliser réduire

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);

Disponible sur jsfiddle

12
répondu Xotic750 2013-04-17 10:53:07

Créer une méthode sum fonctionnerait bien, par exemple vous pourriez ajouter la fonction sum Au Tableau

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;
};

, Alors vous pourriez faire

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

Et dans votre cas,

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

Edit: L'extension des builtins peut être mal vue car si tout le monde le faisait, nous aurions des choses qui se substitueraient de manière inattendue (collisions d'espaces de noms). vous pouvez ajouter la fonction sum à un module et accepter un tableau comme argument si vous le souhaitez. cela pourrait signifier changer la signature en myModule.sum = function(arr, selector) { alors this serait devenir arr

11
répondu lee penkman 2015-05-19 05:35:04

Ou dans ES6

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

Exemple:

[1,2,3].reduce((a, b)=>a+b) // return 6
6
répondu Honzík 2016-10-04 15:00:16

Si vous voulez jeter le tableau en même temps que la sommation, vous pouvez faire (disons, stack est le tableau):

var stack = [1,2,3],
    sum = 0;
while(stack.length > 0) { sum += stack.pop() };
2
répondu btk 2015-12-07 11:08:35

Vous pouvez utiliser la méthode map native pour les tableaux. Méthode de carte (tableau) (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; });

Est votre résultat

1
répondu bjhamltn 2015-12-31 03:41:14

La réduction javascript intégrée pour les tableaux n'est pas une norme, mais vous pouvez utiliser un trait de soulignement.js:

var data = _.range(10);
var sum = _(data).reduce(function(memo, i) {return memo + i});

Qui devient

var sumMyData = _(myData).reduce(function(memo, i) {return memo + i[1]}, 0);

Pour votre cas. Jetez un oeil à ce violon aussi.

0
répondu Gismo Ranas 2013-11-11 17:35:14

Ancienne façon (si vous ne le faites pas maintenant la longueur des arguments/paramètres)

 >> function sumla1(){

    result=0
    for(let i=0; i<arguments.length;i++){

        result+=arguments[i];

    }
    return result;
    }
    >> sumla1(45,67,88);
    >> 200

ES6 (déstructuration du tableau)

>> 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
0
répondu Musa 2017-03-06 15:16:41