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?
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
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
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 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
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() };
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
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
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.