wake-up-neo.com

Summenwerte aus einem Array in JavaScript

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

18
Mark Walters

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

93
KooiInc

Ich denke, der einfachste Weg könnte sein:

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

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

13
Xotic750

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.

11
lee penkman

Oder in ES6

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

beispiel:

[1,2,3].reduce((a, b)=>a+b) // return 6
7
Honzík

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() };
2
btk

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

1
bjhamltn

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
0
Musa

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.

0
Gismo Ranas