momo3141

grads

Feb 1st, 2023
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.68 KB | None | 0 0
  1. const Grad = (data) => {
  2. dataCopy = JSON.parse(JSON.stringify(data))
  3. let gradesNamed = dataCopy.grades.map(el => {
  4. if(!el.studentName){
  5. el['studentName'] = dataCopy.students.find(obj => obj.id === el.studentId).name;
  6. }
  7. if(!el.studentId){
  8. el['studentId'] = dataCopy.students.find(obj =>obj.studentName === el.name).id
  9. }
  10. return el
  11. })
  12.  
  13. let examsNamed = dataCopy.exams.map(el => {
  14. if(!el.studentName){
  15. el['studentName'] = dataCopy.students.find(obj => obj.id === el.studentId).name
  16.  
  17. }
  18. if(!el.studentId){
  19. el['studentId'] = dataCopy.students.find(obj =>obj.studentName === el.name).id
  20. }
  21. return el
  22. })
  23.  
  24. let allStudents = dataCopy.students.map(el => {
  25. let elAvgGrade = gradesNamed.filter(obj => obj.studentName === el.name)
  26. .reduce((acc,obj1,_,array) => {
  27. acc = acc+ obj1.grade/array.length
  28. return acc
  29. },0 )
  30.  
  31. let elAvgGradeExams = examsNamed.filter(obj => obj.studentName === el.name)
  32. .reduce((acc,obj1,_,array) => {
  33. acc =acc + obj1.grade/array.length
  34. return acc} ,0 )
  35. let totalGrade = 40*elAvgGrade/100 + 60*elAvgGradeExams/100
  36.  
  37. let examsTaken = examsNamed.filter(obj => obj.studentName === el.name).length
  38.  
  39. return {
  40. 'id': el.id,
  41. 'name': el.name,
  42. 'grade': Number(totalGrade.toFixed(1)),
  43. 'examsTaken': examsTaken
  44. }
  45. })
  46.  
  47. let graduates = allStudents.filter(el =>{
  48. if( el.grade >= dataCopy.passingGrade && el.examsTaken >=2){
  49. return true
  50. } else {
  51. return false
  52. }
  53. })
  54. .map(el => {
  55. delete el.examsTaken
  56. return el
  57. })
  58.  
  59. let nonGraduates = allStudents.filter(el => {
  60. if (el.grade < dataCopy.passingGrade || el.examsTaken < 2){
  61. return true
  62. } else {
  63. return false
  64. }
  65. })
  66. .map(el => {
  67. let reason = '';
  68. if (el.grade < dataCopy.passingGrade && el.examsTaken >= 2){
  69. reason = 'score'
  70. } else if (el.grade >= dataCopy.passingGrade && el.examsTaken < 2){
  71. reason = 'exams'
  72. } else if (el.grade < dataCopy.passingGrade && el.examsTaken < 2){
  73. reason = 'score and exams'
  74. }
  75. el['reason'] = reason
  76. delete el.grade
  77. delete el.examsTaken
  78. return el;
  79. })
  80. return {
  81. 'course': dataCopy.course,
  82. 'graduates': graduates,
  83. 'nonGraduates': nonGraduates
  84. }
  85.  
  86. }
Advertisement
Add Comment
Please, Sign In to add comment