Как перебрать свойства объектов в массиве
Задача: Мне нужно перебрать student и runLab которые находятся в объектах, а объекты находятся в массиве arrayOfObjects.
Проблема: Код выдает ошибку
mainScript.js:37 Uncaught TypeError: elementMethod.runLab is not a function
at mainScript.js:37:41
at Array.forEach (<anonymous>)
at gradeLabs (mainScript.js:35:11)
at mainScript.js:43:1
Пытался решить никак не могу. Подскажите как исправить ошибку чтобы код работал нормально.
const arrayOfObjects = [
{
student: 'Dmitriy',
runLab () {
return 1;
}
},
{
student: 'Andrew',
runLab () {
return 2;
}
},
{
student: 'Mellisa',
runLab () {
return 3;
}
},
{
student: 'Ann',
runLab () {
return 4;
}
},
];
function gradeLabs(array,expectedResult) {
array.forEach((elementName,elementFunc) => {
const resultName = elementName.student;
const resultLab = elementFunc.runLab();
if (resultLab === expectedResult) {
console.log('Student has PASSED the test',resultName);
}
});
}
gradeLabs(arrayOfObjects,1);
Ответы (1 шт):
Все что вам надо сделать, это заменить elementFunc на elementName. Т.к. вы пытались вызвать метод .runLab у числа(индекс текущего элемента):
const resultLab = elementName.runLab();
Потому что у метода массива forEach 3 параметра - текущий элемент, индекс массива и сам массив
.forEach(function (item, index, array) {})
Полный код:
const arrayOfObjects = [
{
student: 'Dmitriy',
runLab () {
return 1;
}
},
{
student: 'Andrew',
runLab () {
return 2;
}
},
{
student: 'Mellisa',
runLab () {
return 3;
}
},
{
student: 'Ann',
runLab () {
return 4;
}
},
];
function gradeLabs(array,expectedResult) {
array.forEach((elementName) => {
if (elementName.runLab() === expectedResult) {
console.log('Student has PASSED the test', elementName.student);
}
});
}
gradeLabs(arrayOfObjects,2);
Хотя я бы рекомендовал вам для поиска 1 элемента массива воспользоваться методом .find или циклом for(т.к. при нахождении желаемого элемента, дальнейший перебор можно прервать).