Besserer Weg, um einen Eigenschaftswert in einem Array zu summieren

Ich habe so etwas:

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

Um nun eine Gesamtmenge dieses Arrays zu haben, mache ich so etwas:

$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 einfach, wenn es sich nur um ein Array handelt, aber ich habe andere Arrays mit einem anderen Eigenschaftsnamen, die ich summieren möchte.

Ich wäre glücklicher, wenn ich so etwas machen könnte:

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

Aber ich weiß nicht, wie ich so vorgehen soll, dass ich es in Zukunft wiederverwenden könnte:

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

Antworten

Ich habe mich für den @ gruff-bunny Vorschlag entschieden, also habe ichVermeiden Sie das Prototyping von nativen Objekten (Array)

Ich habe gerade eine kleine Änderung an seiner Antwort vorgenommen, um das Array zu validieren, und der zu summierende Wert ist nicht null. Dies ist meine letzte Implementierung:

$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);
};

Antworten auf die Frage(9)

Ihre Antwort auf die Frage