For the below code. The following return the correct results:
lookUpProfile("Bob", "number"); // returns 'No such contact'
lookUpProfile("Akira", "address"); // return 'No such property'
However, for the following it doesn't return the expected result.
lookupProfile("Kristian", "lastName"); // should return 'Vos'
lookupProfile("Sherlock", "likes"); // should return ["Intriguing Cases", "Violin"]
Thank you.
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){
// Only change code below this line
for (var i = 0; i < contacts.length; i++) {
if (contacts[i][firstName] === firstName) {
if (contacts[i][prop] === prop) {
return contacts[i][prop];
} else {
return "No such property";
}
} else {
return "No such contact";
}
}
// Only change code above this line
}
You are trying to access the property like this contacts[i].prop
prop
is a variable thus you need to use the brackets notation contacts[i][prop]
Another way of doing this :
You can use Array#find()
to get the contact with the first name.
find()
will return undefined
if it doesn't find a contact. They you can access the property and see if it returns undefined
or not
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) { const contact = contacts.find(c=>c.firstName === firstName); if(!contact) return "No such contact"; const propValue = contact[prop]; if(!propValue) return "No such property"; return propValue; } console.log(lookUpProfile("Bob", "number")); // returns 'No such contact' console.log(lookUpProfile("Akira", "address")); // return 'No such property' console.log(lookUpProfile("Kristian", "lastName")); // should return 'Vos' console.log(lookUpProfile("Sherlock", "likes")); // should return ["Intriguing Cases", "Violin"]
And with a one-liner return
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) { const contact = contacts.find(c=>c.firstName === firstName); return contact ? contact[prop] ? contact[prop] : "No such property" : "No such contact"; } console.log(lookUpProfile("Bob", "number")); // returns 'No such contact' console.log(lookUpProfile("Akira", "address")); // return 'No such property' console.log(lookUpProfile("Kristian", "lastName")); // should return 'Vos' console.log(lookUpProfile("Sherlock", "likes")); // should return ["Intriguing Cases", "Violin"]
And using a for-loop
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){ for(let i=0; i<contacts.length; i++){ if(contacts[i].firstName === firstName){ if(contacts[i].hasOwnProperty(prop)){ return contacts[i][prop]; }else{ return "No such property"; } } } return "No such contact"; } console.log(lookUpProfile("Bob", "number")); // returns 'No such contact' console.log(lookUpProfile("Akira", "address")); // return 'No such property' console.log(lookUpProfile("Kristian", "lastName")); // should return 'Vos' console.log(lookUpProfile("Sherlock", "likes")); // should return ["Intriguing Cases", "Violin"]
Correct code for getting your prop:
return contacts[i][prop]
When you do contacts[i].prop
it's looking for {'prop': ...}
Corresponding docs: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors
for (var key in contacts) {
//You can loop through the contacts object
var obj = contacts[key];//get the object
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.