1 | var _ = require('underscore');
|
2 |
|
3 |
|
4 | exports.calculate = function (credits) {
|
5 | var obj = {
|
6 | total_credits: exports.getTotalCredits(credits)
|
7 | };
|
8 | obj.weighted_average = exports.getWeightedAverage(credits, obj.total_credits);
|
9 | return obj;
|
10 | };
|
11 |
|
12 | exports.getTotalCredits = function (credits) {
|
13 | return _.reduce(credits, ((a, b) => a + b.credits_received), 0);
|
14 | };
|
15 |
|
16 | exports.parseGrade = function (grade) {
|
17 | if (grade === 'BEST') {
|
18 | return 6;
|
19 | }
|
20 | var parsed = parseFloat(grade);
|
21 | if (_.isNaN(parsed)) {
|
22 | return 1;
|
23 | }
|
24 | return parsed;
|
25 | };
|
26 |
|
27 | exports.getWeightedAverage = function (credits, total_credits) {
|
28 | if (!credits.length) {
|
29 | return 0;
|
30 | }
|
31 | var avg = _.reduce(credits, (a, b) => {
|
32 | return b.credits_received * exports.parseGrade(b.grade) + a;
|
33 | }, 0) / total_credits;
|
34 | return Math.round(avg * 100) / 100;
|
35 | };
|
36 |
|