我有一个简单的ng-repeat,显示一个值列表(财务收入)。如何计算此列表中的平均值?
<div ng-repeat="data in MyData">
{{ data.income }}
</div>
<div>
Average:
</div>
显示:
11
14
8
9
21
10
2
1
5
13
由于
答案 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。