diff --git a/README.md b/README.md index a6661d9..00be799 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ - [Math](#math) - [min](#min) - [max](#max) + - [average](#average) - [percent](#percent) - [radix](#radix) - [sum](#sum) @@ -1017,6 +1018,30 @@ min find and return the lowest number in a given array +``` + +###average + +Average number of some property in given array + +```js +$scope.scores = [ + { name: 'Dan', score: 10 }, + { name: 'Edd', score: 20 }, + { name: 'Edi', score: 30 }, + { name: 'Ari', score: 40 }, + { name: 'Tod', score: 50 } + ]; +``` +```html +

{{ scores | average: 'score' }}

+ + + ``` ###percent Percentage between two numbers
diff --git a/src/_filter/math/average.js b/src/_filter/math/average.js new file mode 100644 index 0000000..d2e3dee --- /dev/null +++ b/src/_filter/math/average.js @@ -0,0 +1,24 @@ +/** + * @ngdoc filter + * @name average + * @kind function + * + * @description + * calculate average number of some property in given array + */ + +angular.module('a8m.math.average', ['a8m.math']) + + .filter('average', function() { + return function(collection, prop) { + + if(!angular.isArray(collection)) { + return collection; + } + var sum = 0; + angular.forEach(collection,function(ele) { + sum += ele[prop]; + }); + return sum/collection.length; + }; +}); \ No newline at end of file diff --git a/test/spec/filter/math/average.js b/test/spec/filter/math/average.js new file mode 100644 index 0000000..072350d --- /dev/null +++ b/test/spec/filter/math/average.js @@ -0,0 +1,34 @@ +'use strict'; + +describe('averageFilter', function () { + + var filter; + var array = [ + { name: 'Dan', score: 80 }, + { name: 'Edd', score: 90 }, + { name: 'Edi', score: 40 }, + { name: 'Ari', score: 87 }, + { name: 'Tod', score: 99 } + ]; + + beforeEach(module('a8m.math.average')); + + beforeEach(inject(function ($filter) { + filter = $filter('average'); + })); + + + it('should get an array of numbers and return its average', function() { + + expect(filter(array, 'score')).toEqual(79.2); + }); + + it('should get an !array and return it as-is', function() { + + expect(filter('angular', 'name')).toEqual('angular'); + expect(filter({})).toEqual({}); + expect(filter(!0)).toBeTruthy(); + + }); + +});