web-dev-qa-db-fra.com

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 totaliser les valeurs numériques trouvées dans le tableau (ex. 0 + 0 + 21 + 2 + 0 et ainsi de suite) et d’avoir une variable avec le résultat que je peux utiliser en dehors de la balise de script J'ai 7 de ce type de tableaux correspondant à chaque jour de la semaine. Je veux faire une comparaison par la suite sur cette base. C'est la méthode la plus préférée pour ce genre d'actions si c'est possible? 

49

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
Mark Walters

Vous pouvez utiliser la méthode 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);

Voir MDN

93
KooiInc

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

values.reduce(function(a, b){return a+b;})
53
ruhanbidart

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

13
Xotic750

Créer une méthode de somme fonctionnerait bien, par exemple. vous pouvez ajouter la fonction 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;
};

alors vous pourriez faire 

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

et dans votre cas

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

Éditer: Il peut être désapprouvé d'étendre les fonctions intégrées car si tout le monde le faisait, les choses se superposeraient de manière inattendue (collisions d'espace de nom). vous pouvez ajouter la fonction sum à un module et accepter un tableau en tant qu'argument si vous préférez . Cela pourrait vouloir dire que vous devez changer la signature en myModule.sum = function(arr, selector) {, alors this deviendrait arr

11
lee penkman

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

var stack = [1,2,3],
    sum = 0;
while(stack.length > 0) { sum += stack.pop() };
2
btk

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

a est ton résultat

1
bjhamltn

Ancienne manière (si vous n'avez 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
Musa

La réduction intégrée par javascript pour les tableaux n'est pas une norme, mais vous pouvez utiliser underscore.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
Gismo Ranas