从JSON中的值列表计算平均值

时间:2014-08-07 15:19:52

标签: angularjs angularjs-directive angularjs-scope angularjs-ng-repeat

我有一个简单的ng-repeat,显示一个值列表(财务收入)。如何计算此列表中的平均值?

<div ng-repeat="data in MyData">
    {{ data.income }}
</div>
<div>
    Average:
</div>

显示:

11
14
8
9
21
10
2
1
5
13

由于

4 个答案:

答案 0 :(得分:5)

在HTML中

Average: {{calculateAverage(MyData)}}

代码

$scope.calculateAverage = function(MyData){ 
    var sum = 0; 
    for(var i = 0; i < MyData.length; i++){
        sum += parseInt(MyData[i], 10); //don't forget to add the base 
    }

    var avg = sum/MyData.length;

    return avg; 
};

答案 1 :(得分:4)

您必须编写一个函数,该函数将整数数组作为参数并返回平均值。

这里的大多数建议都会将函数分配给控制器中的$ scope,但是,我会创建一个$ filter,以便在整个应用程序中作为实用程序重用。

(function(angular) {

    function average($log) {
        return function(array) {
            if (!angular.isArray(array) || array.length === 0) {
                $log.error("Expect array.");
                return;
            }

            var sum = 0;
            angular.forEach(array, function(value) {
                if (!angular.isNumber(value)) {
                    $log.error("Expect number.");
                    return;
                }
                sum += value; 
            });

            return sum / array.length;     
        };
    }

    angular
        .module("yourAppName")
        .filter("average", ["$log", average]);

})(angular);

您现在可以在Angular代码中的任何位置注入$ filter,并使用&#34; average&#34;命名空间。

angular
    .module("yourAppName")
    .controller("yourCtrl", ["$filter", "$scope", function($scope, $filter) {
        $scope.MyData = {
            income: [], // your integer array
            average: $filter("average")($scope.MyData.income); 
        };
    }]);

或者在HTML中:

<div ng-repeat="data in MyData">
    {{ data }}
</div>
<div>
    Average: {{ MyData | average }}
</div>

答案 2 :(得分:3)

我不认为这与AngularJS有关。 您需要创建一个计算平均值的函数,然后:

<div ng-repeat="data in MyData">
    {{ data.income }}
</div>
<div>
    Average: {{ myAveragingFunction(MyData) }}
</div>

答案 3 :(得分:0)

您可以使用Alasql库进行计算平均值和其他数据处理。

这是控制器的代码:

function MyCtrl($scope) {
    $scope.MyData = [{income:1000}, {income:2000}];

     $scope.avgIncome = function() {
         return alasql('SELECT VALUE AVG(income) FROM ?',[$scope.MyData]);
     };
}; 

和HTML:

<div ng-repeat="data in MyData">
    {{ data.income }}
</div>
<div>
    Average: {{avgIncome()}}
</div>

请参阅jsFiddle的this example