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?
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
Je pense que le moyen le plus simple pourrait être:
values.reduce(function(a, b){return a+b;})
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
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
Ou dans ES6
values.reduce((a, b) => a + b),
Exemple:
[1,2,3].reduce((a, b)=>a+b) // return 6
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() };
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
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.
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