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 einen Gesamtbetrag dieses Arrays zu haben, mache ich ungefähr so:
$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 nur ein Array gibt, aber ich habe andere Arrays mit einem anderen Eigenschaftsnamen, den ich zusammenfassen möchte.
Ich wäre glücklicher, wenn ich so etwas tun könnte:
$scope.traveler.Sum({ Amount });
Aber ich weiß nicht, wie ich das so durchgehen soll, dass ich es in Zukunft so wiederverwenden könnte:
$scope.someArray.Sum({ someProperty });
Antworten
Ich habe mich für den @ gruff-bunny-Vorschlag entschieden, um das Prototyping eines nativen Objekts (Array) zu vermeiden.
Ich habe nur eine kleine Änderung an seiner Antwort vorgenommen, um das Array zu validieren, und der zu summierende Wert ist nicht null. Dies ist meine endgültige 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);
};