From bb50eabb196779431741ed738fe41cc64ee00205 Mon Sep 17 00:00:00 2001 From: benbakhar Date: Sat, 11 Oct 2014 22:32:51 +0300 Subject: [PATCH 1/9] feat(): added average filter to math filters --- src/_filter/math/average.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/_filter/math/average.js diff --git a/src/_filter/math/average.js b/src/_filter/math/average.js new file mode 100644 index 0000000..efa4ef0 --- /dev/null +++ b/src/_filter/math/average.js @@ -0,0 +1,28 @@ +/** + * @ngdoc filter + * @name average + * @kind function + * + * @description + * calculate average number of given array + * TODO calculate average of an attribute of given object + */ + +angular.module('a8m.math.average', ['a8m.math']) + + .filter('average', function () { + return function (input) { + + if(!isArray(input)) { + return input + } + var res = 0; + input.forEach(function(num) { + res += num; + }); + return res/input.length + } + }); + + + \ No newline at end of file From c59d771213819fb6a15830d39da9c06f035bbe2c Mon Sep 17 00:00:00 2001 From: benbakhar Date: Sat, 11 Oct 2014 22:33:21 +0300 Subject: [PATCH 2/9] added unit tests for average filter --- test/spec/filter/math/average.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 test/spec/filter/math/average.js diff --git a/test/spec/filter/math/average.js b/test/spec/filter/math/average.js new file mode 100644 index 0000000..8df6746 --- /dev/null +++ b/test/spec/filter/math/average.js @@ -0,0 +1,30 @@ +'use strict'; + +describe('averageFilter', function () { + + var filter; + + 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([1,2,3,4,5])).toEqual(3); + expect(filter([1,2,3,4,5,6])).toEqual(3.5); + expect(filter([2,2,2,2,2])).toEqual(2); + expect(filter([1])).toEqual(1); + + }); + + it('should get an !array and return it as-is', function() { + + expect(filter('angular')).toEqual('angular'); + expect(filter({})).toEqual({}); + expect(filter(!0)).toBeTruthy(); + + }); + +}); From 64b5ddac3e4957df8c236f973777e50badb6382b Mon Sep 17 00:00:00 2001 From: benbakhar Date: Sat, 11 Oct 2014 22:36:32 +0300 Subject: [PATCH 3/9] updated readme --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.md b/README.md index a6661d9..fa93be0 100644 --- a/README.md +++ b/README.md @@ -1017,6 +1017,21 @@ min find and return the lowest number in a given array + +###average + +Average number ofgiven array + +```html +

{{ [1,2,3,4,5] | average }}

+ + +``` + ``` ###percent Percentage between two numbers
From 949966b65eb640431ee9d01031d78f4cf03bb16a Mon Sep 17 00:00:00 2001 From: Ben Bakhar Date: Sat, 11 Oct 2014 22:44:26 +0300 Subject: [PATCH 4/9] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fa93be0..38384d1 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) @@ -1018,6 +1019,7 @@ min find and return the lowest number in a given array result: 1 --> +``` ###average @@ -1030,7 +1032,6 @@ Average number ofgiven array result: 3 --> -``` ``` ###percent From 06e40f468f0a8bf5f779ef74337969be083a2bce Mon Sep 17 00:00:00 2001 From: Ben Bakhar Date: Sat, 11 Oct 2014 22:45:13 +0300 Subject: [PATCH 5/9] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 38384d1..45d15e6 100644 --- a/README.md +++ b/README.md @@ -1023,7 +1023,7 @@ result: ###average -Average number ofgiven array +Average number of given array ```html

{{ [1,2,3,4,5] | average }}

From 4210346e3a0ab6ed701664c0695623b9ed8ab0fe Mon Sep 17 00:00:00 2001 From: Ben Bakhar Date: Sat, 11 Oct 2014 22:50:26 +0300 Subject: [PATCH 6/9] Update average.js --- src/_filter/math/average.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/_filter/math/average.js b/src/_filter/math/average.js index efa4ef0..adbf586 100644 --- a/src/_filter/math/average.js +++ b/src/_filter/math/average.js @@ -13,16 +13,16 @@ angular.module('a8m.math.average', ['a8m.math']) .filter('average', function () { return function (input) { - if(!isArray(input)) { - return input - } - var res = 0; - input.forEach(function(num) { - res += num; - }); - return res/input.length - } - }); + if(!isArray(input)) { + return input + } + var res = 0; + input.forEach(function(num) { + res += num; + }); + return res/input.length + } + }); - \ No newline at end of file + From 60e34136558065b7c05d43de1d3804b50ffb2a56 Mon Sep 17 00:00:00 2001 From: benbakhar Date: Wed, 15 Oct 2014 01:43:39 +0300 Subject: [PATCH 7/9] fix(): changed average filter to fit ariel suggestion --- src/_filter/math/average.js | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/src/_filter/math/average.js b/src/_filter/math/average.js index adbf586..d2e3dee 100644 --- a/src/_filter/math/average.js +++ b/src/_filter/math/average.js @@ -4,25 +4,21 @@ * @kind function * * @description - * calculate average number of given array - * TODO calculate average of an attribute of given object + * calculate average number of some property in given array */ angular.module('a8m.math.average', ['a8m.math']) - .filter('average', function () { - return function (input) { - - if(!isArray(input)) { - return input - } - var res = 0; - input.forEach(function(num) { - res += num; - }); - return res/input.length + .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 From 5a7830f52496a5dc76c6487f96fed6ede4d6bdb3 Mon Sep 17 00:00:00 2001 From: benbakhar Date: Wed, 15 Oct 2014 01:43:59 +0300 Subject: [PATCH 8/9] fix(): update tests to new filter impl --- test/spec/filter/math/average.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/test/spec/filter/math/average.js b/test/spec/filter/math/average.js index 8df6746..072350d 100644 --- a/test/spec/filter/math/average.js +++ b/test/spec/filter/math/average.js @@ -3,6 +3,13 @@ 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')); @@ -10,18 +17,15 @@ describe('averageFilter', function () { filter = $filter('average'); })); - it('should get an array of numbers and return its average', function() { - expect(filter([1,2,3,4,5])).toEqual(3); - expect(filter([1,2,3,4,5,6])).toEqual(3.5); - expect(filter([2,2,2,2,2])).toEqual(2); - expect(filter([1])).toEqual(1); + 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')).toEqual('angular'); + expect(filter('angular', 'name')).toEqual('angular'); expect(filter({})).toEqual({}); expect(filter(!0)).toBeTruthy(); From 0b8c84913510ad1e5dece2929e70cdbdbd324b69 Mon Sep 17 00:00:00 2001 From: benbakhar Date: Wed, 15 Oct 2014 01:47:31 +0300 Subject: [PATCH 9/9] update readme --- README.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 45d15e6..00be799 100644 --- a/README.md +++ b/README.md @@ -1023,14 +1023,23 @@ result: ###average -Average number of given array +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 -

{{ [1,2,3,4,5] | average }}

+

{{ scores | average: 'score' }}

```