Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const Grad = (data) => {
- dataCopy = JSON.parse(JSON.stringify(data))
- let gradesNamed = dataCopy.grades.map(el => {
- if(!el.studentName){
- el['studentName'] = dataCopy.students.find(obj => obj.id === el.studentId).name;
- }
- if(!el.studentId){
- el['studentId'] = dataCopy.students.find(obj =>obj.studentName === el.name).id
- }
- return el
- })
- let examsNamed = dataCopy.exams.map(el => {
- if(!el.studentName){
- el['studentName'] = dataCopy.students.find(obj => obj.id === el.studentId).name
- }
- if(!el.studentId){
- el['studentId'] = dataCopy.students.find(obj =>obj.studentName === el.name).id
- }
- return el
- })
- let allStudents = dataCopy.students.map(el => {
- let elAvgGrade = gradesNamed.filter(obj => obj.studentName === el.name)
- .reduce((acc,obj1,_,array) => {
- acc = acc+ obj1.grade/array.length
- return acc
- },0 )
- let elAvgGradeExams = examsNamed.filter(obj => obj.studentName === el.name)
- .reduce((acc,obj1,_,array) => {
- acc =acc + obj1.grade/array.length
- return acc} ,0 )
- let totalGrade = 40*elAvgGrade/100 + 60*elAvgGradeExams/100
- let examsTaken = examsNamed.filter(obj => obj.studentName === el.name).length
- return {
- 'id': el.id,
- 'name': el.name,
- 'grade': Number(totalGrade.toFixed(1)),
- 'examsTaken': examsTaken
- }
- })
- let graduates = allStudents.filter(el =>{
- if( el.grade >= dataCopy.passingGrade && el.examsTaken >=2){
- return true
- } else {
- return false
- }
- })
- .map(el => {
- delete el.examsTaken
- return el
- })
- let nonGraduates = allStudents.filter(el => {
- if (el.grade < dataCopy.passingGrade || el.examsTaken < 2){
- return true
- } else {
- return false
- }
- })
- .map(el => {
- let reason = '';
- if (el.grade < dataCopy.passingGrade && el.examsTaken >= 2){
- reason = 'score'
- } else if (el.grade >= dataCopy.passingGrade && el.examsTaken < 2){
- reason = 'exams'
- } else if (el.grade < dataCopy.passingGrade && el.examsTaken < 2){
- reason = 'score and exams'
- }
- el['reason'] = reason
- delete el.grade
- delete el.examsTaken
- return el;
- })
- return {
- 'course': dataCopy.course,
- 'graduates': graduates,
- 'nonGraduates': nonGraduates
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment