создание метода в классе с добавлением данных в массив js

Задача: Создайте метод addGrade(grade, subject), который будет вносить оценку по соответствующему предмету. При этом grade — оценка, subject — предмет. Условия работы метода: 1)Метод возвращает количество поставленных оценок по данному предмету. 2)Оценка ставится числом в пределах от 1 до 5. 3)При неверной оценке дополнительно выдаётся сообщение с ошибкой, оценка в журнал не заносится. Текущее количество оценок все равно требуется вернуть.

class StudentLog {
  constructor(name) {
    this.name = name;
    this.marks = [];
  }
  getName() {
    return this.name
  }
  addGrade(grade, subject) {
    if (grade > 0 && grade <= 5) {
      this.subject.push(grade);
    } else {
      console.log(`Вы пытались поставить оценку "${grade} "по предмету ${subject}"`);
    }
    return this.subject.length
  }
}

const log = new StudentLog('Олег Никифоров');

console.log(log.addGrade(3, 'algebra')); 
// 1

console.log(log.addGrade('отлично!', 'math'));
// Вы пытались поставить оценку "отлично!" по предмету "math". Допускаются только числа от 1 до 5.
// 0

console.log(log.addGrade(4, 'algebra'));
// 2

console.log(log.addGrade(5, 'geometry'));
// 1

console.log(log.addGrade(25, 'geometry'));
// Вы пытались поставить оценку "25" по предмету "geometry". Допускаются только числа от 1 до 5.
// 1

Проверка метода происходит по следующей инструкции: const log = new StudentLog('Олег Никифоров');

console.log(log.addGrade(3, 'algebra')); // 1

console.log(log.addGrade('отлично!', 'math')); // Вы пытались поставить оценку "отлично!" по предмету "math". Допускаются только числа от 1 до 5. // 0

console.log(log.addGrade(4, 'algebra')); // 2

console.log(log.addGrade(5, 'geometry')); // 1

console.log(log.addGrade(25, 'geometry')); // Вы пытались поставить оценку "25" по предмету "geometry". Допускаются только числа от 1 до 5. // 1


Ответы (1 шт):

Автор решения: Igor

class StudentLog {
  constructor(name) {
    this.name = name;
    this.marks = {};
  }
  getName() {
    return this.name
  }
  getTotalCountOfMarks() {
    return Object.values(this.marks).reduce((a, b) => a + b.length, 0);
  }
  addGrade(grade, subject) {
    if (grade > 0 && grade <= 5) {
      this.marks[subject] || (this.marks[subject] = []);
      this.marks[subject].push(grade);
    } else {
      console.log(`Вы пытались поставить оценку "${grade} "по предмету ${subject}"`);
    }
    return (this.marks[subject] || { length: 0 }).length;
  }
}

const log = new StudentLog('Олег Никифоров');

console.log(log.addGrade(3, 'algebra')); 
// 1

console.log(log.addGrade('отлично!', 'math'));
// Вы пытались поставить оценку "отлично!" по предмету "math". Допускаются только числа от 1 до 5.
// 0

console.log(log.addGrade(4, 'algebra'));
// 2

console.log(log.addGrade(5, 'geometry'));
// 1

console.log(log.addGrade(25, 'geometry'));
// Вы пытались поставить оценку "25" по предмету "geometry". Допускаются только числа от 1 до 5.
// 1

→ Ссылка