Bessere Möglichkeit, einen Eigenschaftswert in einem Array zu summieren

Ich habe so etwas wie dieses:

$scope.traveler = [
            {  description: 'Senior', Amount: 50},
            {  description: 'Senior', Amount: 50},
            {  description: 'Adult', Amount: 75},
            {  description: 'Child', Amount: 35},
            {  description: 'Infant', Amount: 25 },
];

Nun eine Summe von diesem Feld bin ich sowas:

$scope.totalAmount = function(){
       var total = 0;
       for (var i = 0; i < $scope.traveler.length; i++) {
              total = total + $scope.traveler[i].Amount;
            }
       return total;
}

Es ist leicht, wenn nur ein array, aber ich habe andere arrays mit einer anderen Eigenschaft name, möchte ich eine Summe.

Ich wäre glücklicher, Wenn ich tun könnte etwas wie diese:

$scope.traveler.Sum({ Amount });

Aber ich weiß nicht, wie Sie dies in einer Weise, die ich wiederverwenden konnte, es in Zukunft so:

$scope.someArray.Sum({ someProperty });

Antwort

Entschied ich mich für @schroff-bunny Vorschlag, also ich vermeiden prototyping native Objekt (Array)

Ich habe gerade ein wenig Modifikation, um seine Antwort die Validierung der array und der Wert der Summe nicht null ist, dies ist meine Letzte Umsetzung:

$scope.sum = function (items, prop) {
    if (items == null) {
        return 0;
    }
    return items.reduce(function (a, b) {
        return b[prop] == null ? a : a + b[prop];
    }, 0);
};

InformationsquelleAutor der Frage nramirez | 2014-04-23

Schreibe einen Kommentar