Исходные данные:
Есть массив contacts, каждый его элемент - это объект со своими свойствами. Нужно сделать функцию, которая берет значение first
и сравнивает его со всеми firstName
массива. Если совпадение есть, то нужно вывести второе заданное значение.
В конкретном случае это значение lastName того же объекта. Я уже и так, и эдак пытался, ничего не выходит.
Такое ощущение что return contacts[i][prop];
просто не работает.
В результате должно вывести: "Vos"
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(first, prop) {
for (var i = 0; i < contacts.length; i++) {
if (contacts[i].firstName == first) {
document.write('First name has matches<BR>')
if (contacts[i].hasOwnProperty(prop)) {
document.write('Prop exist<BR>');
return contacts[i][prop];
}
return "No such property";
break;
}
}
return "No such contact";
}
lookUpProfile("Kristian", "lastName");
document.write(lookUpProfile());
Ваш код работает. Просто вы теряете значение Vos
и выполняете второй раз с пустыми значениями в этом месте:
lookUpProfile("Kristian", "lastName");
document.write(lookUpProfile());
Поменяйте эти две строки на:
document.write(lookUpProfile("Kristian", "lastName"));
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(first, prop) {
for (var i = 0; i < contacts.length; i++) {
if (contacts[i].firstName == first) {
document.write('First name has matches<BR>')
if (contacts[i].hasOwnProperty(prop)) {
document.write('Prop exist<BR>');
return contacts[i][prop];
}
return "No such property";
break;
}
}
return "No such contact";
}
document.write(lookUpProfile("Kristian", "lastName"));
К слову, можно чуть-чуть модифицировать ваш код с использованием .find()
:
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(first, prop) {
let contact = contacts.find(function(c) {
return c.firstName === first;
});
if (!contact) {
return "No such contact";
}
if (!contact.hasOwnProperty(prop)) {
return "No such property";
}
return contact[prop];
}
document.write(lookUpProfile("Kristian", "lastName"));
На сайте в консоли браузера возникает ошибка: