配列内のプロパティ値を合計するより良い方法 質問する

配列内のプロパティ値を合計するより良い方法 質問する

次のようなものがあります:

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

この配列の合計量を取得するには、次のようにします。

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

配列が 1 つだけの場合は簡単ですが、異なるプロパティ名を持つ他の配列があり、それらを合計したい場合があります。

次のようなことができたらもっと幸せだと思います:

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

しかし、これを将来次のように再利用できるようにするにはどうすればいいのかわかりません。

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

ベストアンサー1

この質問には既に回答があることは承知していますが、私は別の回答を提案したいと思います。配列を減らす配列を合計することがreduceの標準的な例であることがわかります。

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

$scope.travelerTotal = $scope.sum($scope.traveler, 'Amount');

Fiddle

おすすめ記事