Tôi có một cái gì đó như thế này:
$scope.traveler = [
{ description: 'Senior', Amount: 50},
{ description: 'Senior', Amount: 50},
{ description: 'Adult', Amount: 75},
{ description: 'Child', Amount: 35},
{ description: 'Infant', Amount: 25 },
];
Bây giờ để có tổng số tiền của mảng này, tôi đang làm một cái gì đó như thế này:
$scope.totalAmount = function(){
var total = 0;
for (var i = 0; i < $scope.traveler.length; i++) {
total = total + $scope.traveler[i].Amount;
}
return total;
}
Thật dễ dàng khi chỉ có một mảng, nhưng tôi có các mảng khác với một tên thuộc tính khác mà tôi muốn tính tổng.
Tôi sẽ hạnh phúc hơn nếu tôi có thể làm một cái gì đó như thế này:
$scope.traveler.Sum({ Amount });
Nhưng tôi không biết làm thế nào để vượt qua điều này theo cách mà tôi có thể tái sử dụng nó trong tương lai như thế này:
$scope.someArray.Sum({ someProperty });
Câu trả lời
Tôi đã quyết định sử dụng đề xuất @ gruff-bunny, vì vậy tôi tránh tạo mẫu đối tượng gốc (Array)
Tôi vừa thực hiện một sửa đổi nhỏ cho câu trả lời của anh ấy để xác thực mảng và giá trị tổng không phải là null, đây là lần thực hiện cuối cùng của tôi:
$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);
};