Ich habe eine JavaScript-Variable mit dem Namen myData
definiert. Dies ist ein new Array
wie folgt:
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]);
Ich frage mich, ob es möglich ist, die im Array gefundenen Zahlenwerte zu summieren (zB 0 + 0 + 21 + 2 + 0 usw.) und wahrscheinlich eine Variable mit dem Ergebnis haben, die ich außerhalb des Skript-Tags verwenden kann Ich habe 7 solcher Arrays für jeden Tag in der Woche. Ich möchte danach einen Vergleich machen. Ist dies die am meisten bevorzugte Methode für diese Art von Aktionen, wenn möglich?
Versuche Folgendes
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
Sie können die Array.reduce
-Methode verwenden:
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);
Siehe MDN
Ich denke, der einfachste Weg könnte sein:
values.reduce(function(a, b){return a+b;})
Ich würde reduzieren
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);
Verfügbar auf jsfiddle
Das Erstellen einer Summenmethode würde gut funktionieren, z. Sie können die Summenfunktion zu Array hinzufügen
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;
};
dann könntest du tun
> [1,2,3].sum()
6
und in deinem Fall
> myData.sum(function(item) { return item[1]; });
23
Edit: Das Erweitern der Built-Ins kann verpönt sein, denn wenn alle es tun würden, würden sich die Dinge unerwartet überschreiben (Namespace-Kollisionen). Sie können die Summenfunktion zu einem Modul hinzufügen und ein Array als Argument akzeptieren, wenn Sie möchten Dies kann bedeuten, dass die Signatur in myModule.sum = function(arr, selector) {
geändert wird. this
würde arr
.
Oder in ES6
values.reduce((a, b) => a + b),
beispiel:
[1,2,3].reduce((a, b)=>a+b) // return 6
Wenn Sie das Array gleichzeitig mit dem Summieren verwerfen möchten, können Sie Folgendes tun (beispielsweise stack
ist das Array):
var stack = [1,2,3],
sum = 0;
while(stack.length > 0) { sum += stack.pop() };
Sie können die native Kartenmethode für Arrays verwenden . map Methode (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 ist dein Ergebnis
Alte Methode (wenn Sie jetzt nicht die Länge der Argumente/Parameter angeben)
>> function sumla1(){
result=0
for(let i=0; i<arguments.length;i++){
result+=arguments[i];
}
return result;
}
>> sumla1(45,67,88);
>> 200
ES6 (Zerstörung des Arrays)
>> 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
Das integrierte JavaScript für Arrays ist kein Standard, aber Sie können Underscore.js verwenden:
var data = _.range(10);
var sum = _(data).reduce(function(memo, i) {return memo + i});
was wird
var sumMyData = _(myData).reduce(function(memo, i) {return memo + i[1]}, 0);
für deinen Fall Schauen Sie sich diese Geige auch an.