J'ai quelque chose comme ça:
$scope.traveler = [
{ description: 'Senior', Amount: 50},
{ description: 'Senior', Amount: 50},
{ description: 'Adult', Amount: 75},
{ description: 'Child', Amount: 35},
{ description: 'Infant', Amount: 25 },
];
Maintenant, pour avoir un montant total de ce tableau, je fais quelque chose comme ceci:
$scope.totalAmount = function(){
var total = 0;
for (var i = 0; i < $scope.traveler.length; i++) {
total = total + $scope.traveler[i].Amount;
}
return total;
}
C'est facile lorsqu'il n'y a qu'un seul tableau, mais j'ai d'autres tableaux avec un nom de propriété différent que je voudrais additionner.
Je serais plus heureux si je pouvais faire quelque chose comme ça:
$scope.traveler.Sum({ Amount });
Mais je ne sais pas comment passer par là de manière à pouvoir le réutiliser à l'avenir comme ceci:
$scope.someArray.Sum({ someProperty });
Répondre
J'ai décidé d'utiliser la suggestion @ gruff-bunny, donc j'évite de prototyper un objet natif (Array)
Je viens de faire une petite modification à sa réponse en validant le tableau et la valeur à sum n'est pas nulle, c'est ma mise en œuvre finale:
$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);
};