From 3cb74083a74a8b0dfde2261776c614302029c3cc Mon Sep 17 00:00:00 2001 From: Hykilpikonna Date: Sat, 7 Sep 2019 16:03:57 -0400 Subject: [PATCH] [+] Create method to calculate GPA --- src/utils/gpa-utils.ts | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/utils/gpa-utils.ts b/src/utils/gpa-utils.ts index 44ecb9c..db95f36 100644 --- a/src/utils/gpa-utils.ts +++ b/src/utils/gpa-utils.ts @@ -1,6 +1,8 @@ /** * This is an utility class to calculate GPA. */ +import {Course} from '@/components/app/app'; + export class GPAUtils { // [[Min score, Letter grade, Base GPA], ...] @@ -23,4 +25,49 @@ export class GPAUtils public static MIN = 0; public static LETTER = 1; public static GPA = 2; + + /** + * Calculate GPA for a list of couses + * + * @param coursesOriginal List of courses + */ + public static gpa(coursesOriginal: Course[]): number + { + // Clone array + let courses: Course[] = []; + + // Remove all courses that does not have a grade + coursesOriginal.forEach(course => + { + if (course.numericGrade != null) + { + courses.push(course); + } + }); + + // If no course have grade, return -1 + if (courses.length == 0) + { + return -1; + } + + // Count total GPA + let totalGPA = 0; + courses.forEach(course => + { + // Find the GPA for this course. TODO: Remove course that does not have level + this.SCALE.forEach(scale => + { + // Letter grades are the same + if (scale[this.LETTER] == course.letterGrade) + { + totalGPA += scale[this.GPA] + course.scaleUp; + return; + } + }) + }); + + // Get average GPA + return totalGPA / courses.length; + } }