У меня есть массив объектов (контактов), и мне нужно написать одну функцию, которая должна проверить, является ли firstName (первый параметр функции) фактическим контактом firstName, и данное свойство (prop является вторым параметром функции) является свойством этого контакта. Если оба они истинны, верните "значение" этого свойства.
Если firstName не соответствует никаким контактам, тогда верните "Нет такого контакта",
Если prop не соответствует каким-либо действительным свойствам, верните "Нет такого свойства",
Я знаю, что мне нужно делать, судо, я написал это, но, чтобы написать это в фактическом JavaScript, у меня есть блокировка.
Ниже того, что я написал до сих пор:
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(firstName, prop) {
var value;
for (i = 0; i < 2; i++) {
if (contacts[i].firstName === true && contacts[i].prop === true) {
value = contacts[i].prop;
return value;
}
}
}
Вы можете использовать break out of loop, как только найдете контакт с данным firstName
а затем проверьте пройденное значение prop
и соответствующее сообщение.
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(firstName, prop) {
var value = undefined;
for (i = 0; i < contacts.length; i++) {
if (contacts[i].firstName === firstName) {
value = contacts[i];
break;
}
}
if(!value) {
return 'No such contact';
}
if(!(prop in value)) {
return 'No such property';
}
return value[prop];
}
console.log(lookUpProfile('Sherlock', 'likes'));
console.log(lookUpProfile('Harry', 'friends'));
console.log(lookUpProfile('John', 'likes'));
Вы можете использовать array.prototype.find
чтобы проверить, существует ли контакт в массиве:
var contacts = [{firstname: "aaa", prop1: "val1"}, {firstname: "bbb", prop2: "val2"}];
function yourFunc(firstname, prop) {
var ct = contacts.find(c => c.firstname === firstname);
return ct ? ct[prop] || "No such property" : "No such contact";
}
console.log(yourFunc("aaa", 'prop2'));
console.log(yourFunc("aaa", 'prop1'));
console.log(yourFunc("bbb", 'prop2'));
console.log(yourFunc("bbb", 'prop1'));
console.log(yourFunc("ccc", 'prop1'));
function lookUpProfile(firstName, prop) {
var contact;
for (i = 0; i < contacts.length; i++) {
if (contacts[i].firstName === firstName) {
contact = contacts[i];
break;
}
}
if(!contact) {
return 'No such contact';
}
if(!contact[prop]) {
return 'No such property';
}
return contact[prop];
}
С инструкцией For Loop это должно быть примерно так:
function lookUpProfile(firstName, prop) {
var contact;
for (var i = 0; i < contacts.length; i++) {
if (contacts[i].firstName === firstName){
contact = contacts[i];
break;
}
}
return contact ? ( contact[prop] ? contact[prop] : 'No such property') : 'No such contact';
}
contracts
.