Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function updateSchoolRegister(studentData) {
- let register = {};
- let pattern = /^Student name: (?<name>[A-Z][a-z]+), Grade: (?<grade>\d+), Graduated with an average score: (?<score>\d\.\d+)$/;
- for (let line of studentData) {
- let { name, grade, score } = line.match(pattern).groups;
- let student = { name, score };
- if (score < 3) continue;
- grade = Number(grade) + 1;
- if (!(grade in register)) {
- register[grade] = [];
- }
- register[grade].push(student);
- }
- let output = Object.entries(register)
- .sort(sortGrades)
- .map(formatOutput)
- .join('\n');
- function sortGrades([gradeA], [gradeB]) {
- return +gradeA - +gradeB;
- }
- function averageScore(sum, { score }) {
- return sum + Number(score);
- }
- function getStudents(list, { name }) {
- list.push(name);
- return list;
- }
- function formatOutput([grade, students]) {
- let studentsCount = students.length;
- let averageClassScore = students.reduce(averageScore, 0) / studentsCount;
- let studentInfo = students.reduce(getStudents, []).join(', ');
- let msg = `${grade} Grade\n`;
- msg += `List of students: ${studentInfo}\n`;
- msg += `Average annual grade from last year: ${averageClassScore.toFixed(2)}\n`;
- return msg;
- }
- return output.trim();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement