return не работает?
Есть список объектов и функция, которая проверяет наличие определенного объекта по имени, а также некоторое свойство в объекте.. Вопрос - почему при вызове функции lookUpProfile("Kristian", "lastName") не возвращается "No such contact"? Ведь по идее это должно произойти на первом же объекте, так как там нет имени Kristian.
const contacts = [
{
firstName: "Akira",
lastName: "Laine",
number: "0543236543",
likes: ["Pizza", "Coding", "Brownie Points"],
},
{
firstName: "Harry",
lastName: "Potter",
number: "0994372684",
likes: ["Hogwarts", "Magic", "Hagrid"],
},
{
firstName: "Sherlock",
lastName: "Holmes",
number: "0487345643",
likes: ["Intriguing Cases", "Violin"],
},
{
firstName: "Kristian",
lastName: "Vos",
number: "unknown",
likes: ["JavaScript", "Gaming", "Foxes"],
},
];
function lookUpProfile(name, prop) {
for (var i = 0; i < contacts.length; i++) {
if (contacts[i].firstName == name && contacts[i].hasOwnProperty(prop)) {
return contacts[i][prop];
}
if (contacts[i].firstName == name && !contacts[i].hasOwnProperty(prop)) {
return "No such property";
}
}
if (contacts[i].firstName != name) {
return "No such contact";
}
}
console.log(lookUpProfile("Kristian", "lastName"));
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Если правильно поставить табуляции, то станет ясно, что третий if находится за пределами цикла:
function lookUpProfile(name, prop) {
for (var i = 0; i < contacts.length; i++) {
if (contacts[i].firstName == name && contacts[i].hasOwnProperty(prop)) {
return contacts[i][prop];
}
if (contacts[i].firstName == name && !contacts[i].hasOwnProperty(prop)) {
return "No such property";
}
}
// тут цикл уже кончился!
if (contacts[i].firstName != name) {
return "No such contact";
}
}
Вообще не очень понятно, что в данном случае будет в i (цикл то кончился и его переменная i тут уже не видна), и если в области видимости нет такой переменной, то последний if даст ошибку, если до него дойдёт ход.