UNPKG

859 BJavaScriptView Raw
1var _ = require('underscore');
2
3/* eslint-disable camelcase */
4exports.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
12exports.getTotalCredits = function (credits) {
13 return _.reduce(credits, ((a, b) => a + b.credits_received), 0);
14};
15
16exports.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
27exports.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/* eslint-enable camelcase */