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();
+
+ });
+
+});