Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Students graduation
- /**
- *
- * @param {{ course: string, passingGrade: number, students: Array<{id: number, name: string}>, grades: Array<{ studentId: number, grade: number}>, exams: Array<{ studentId: number, grade: number }>} data
- */
- export default function (data) {
- const students = data.students.map((student) => {
- const grades = data.grades
- .filter((x) => {
- if (x.studentId === student.id || x.studentName === student.name)
- return x.grade;
- })
- .map((x) => {
- return x.grade;
- });
- const avgGradeGrades =
- (grades.reduce((acc, el) => acc + el, 0) / grades.length) * 0.4;
- const examGrades = data.exams
- .filter((x) => {
- if (x.studentId === student.id || x.studentName === student.name)
- return x.grade;
- })
- .map((x) => {
- return x.grade;
- });
- const avgGradeExam =
- examGrades.length === 0 ? 0 : (examGrades.reduce((acc, el) => acc + el, 0) / examGrades.length) * 0.6;
- const finalGrade = avgGradeGrades + avgGradeExam;
- return { ...student, grade: finalGrade, attendsToExam: examGrades.length };
- });
- return {
- name: data.course,
- graduates: students.reduce((acc, el) => {
- if (el.grade >= data.passingGrade && el.attendsToExam >= 2) {
- acc.push({ id: el.id, name: el.name, grade: el.grade });
- }
- return acc;
- }, []),
- nonGraduates: students.reduce((acc, el) => {
- if (el.grade < data.passingGrade && el.attendsToExam < 2) {
- acc.push({ id: el.id, name: el.name, reason: "score and exams" });
- } else if (el.grade < data.passingGrade && el.attendsToExam >= 2) {
- acc.push({ id: el.id, name: el.name, reason: "score" });
- } else if (el.grade >= data.passingGrade && el.attendsToExam < 2) {
- acc.push({ id: el.id, name: el.name, reason: "exams" });
- }
- return acc;
- }, []),
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment