Перебор объектов массива (цикл for, while)
Учебное задание. Пытаюсь перебрать массив объектов.
let studentsArray = [
{ name: "student1", grade: 93 },
{ name: "student2", grade: 53 },
{ name: "student3", grade: 40 },
];
Задача- нужно написать функцию, которая будет перебирать этот массив, и приписывать каждому объекту ключ с буквой, соответсвующей оценке студента
(0-50 = F
51-60 = E
61-70 = D
71-80 = C
81-100 = A)
То есть должно получиться так-
{ name: "student1", grade: 93, final: A},
{ name: "student2", grade: 53, final: E},
{ name: "student3", grade: 40, final: F},
Но мой код ниже выдает undefined, и починить его я так и не смог.
let studentsArray = [
{ name: "student1", grade: 91 },
{ name: "student2", grade: 51 },
{ name: "student3", grade: 45 },
];
function checkStudentGrade() {
for (let i = 0; i < studentsArray.length; i++) {
if (studentsArray[i].grade < 0 ||typeof studentsArray[i].grade !== "number"
) {studentsArray[i].final = "Error!";
} else if (studentsArray[i].grade >= 0 && studentsArray[i].grade <= 50) {
studentsArray[i].final = "F";
} else if (studentsArray[i].grade > 50 && studentsArray[i].grade <= 60) {
studentsArray[i].final = "E";
} else if (studentsArray[i].grade > 60 && studentsArray[i].grade <= 70) {
studentsArray[i].final = "D";
} else if (studentsArray[i].grade > 70 && studentsArray[i].grade <= 80) {
studentsArray[i].final = "C";
} else if (studentsArray[i].grade > 80 && studentsArray[i].grade <= 100) {
studentsArray[i].final = "A";
} else {
studentsArray[i].final = "The number is too high!";
}
}
}
console.log(checkStudentGrade(studentsArray));
Ответы (1 шт):
Во-первых, для улучшения отладки и читаемости лучше вынести в отдельную функцию определение оценки:
function getFinal(grade){
if ( 0 <= grade && grade < 51) return 'F';
if (51 <= grade && grade < 61) return 'E';
if (61 <= grade && grade < 71) return 'D';
if (71 <= grade && grade < 81) return 'C';
else return 'A';
}
Далее с помощью функции forEach проблегаемся по всем элементам и выставляем оценки:
studentsArray.forEach(function (o) {
o.final = getFinal(o.grade);
});
Результат:
0: Object { name: "student1", grade: 91, final: "A" }
1: Object { name: "student2", grade: 51, final: "E" }
2: Object { name: "student3", grade: 45, final: "F" }
По поводу вашей ошибки, то дело в том, что ваша функция ничего не возваращет, поэтому в console.log возвращает она undefined, просто отработав. А выводить в консоль вам нужно сам объект studentsArray
console.log(studentsArray).