обзор
Я изучаю JavaScript и выполняю упражнение, которое сочетает в себе доступ к свойствам объекта, циклам и операторам if / else.
Мой код не работает.Решение (которое работает) вкладывает операторы if / else, но в остальном, похоже, тот же код.Я не понимаю разницу.
инструкции к упражнению
Функция должна проверять, является ли имя фактическим именем первого контакта, а данное свойство (проп) является свойствомэтот контакт.
Если оба значения имеют значение true, вернуть «значение» этого свойства.
Если имя не соответствует ни одному контактузатем верните «Нет такого контакта»
Если свойство не соответствует никаким действительным свойствам контакта, найденного для совпадения имени, то верните «Нет такого свойства»
указанный массив
var 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];
} else if (contacts[i].firstName !== name) {
return "No such contact";
} else {
return "No such property";
}
}
lookUpProfile("Sherlock", "likes");
//should return ["Intriguing Cases", "Violin"]
решение для тренировки
(котороеработает)
for (var x = 0; x < contacts.length; x++){
if (contacts[x].firstName === name) {
if (contacts[x].hasOwnProperty(prop)) {
return contacts[x][prop];
} else {
return "No such property";
}
}
}
return "No such contact";
lookUpProfile("Sherlock", "likes");
//returns ["Intriguing Cases", "Violin"]
почему?
Я ожидал, что оба решения будут работать, но мое - нет.Почему?