Tell us what’s happening:
why can’t i use a nested if- else statment in a for loop but have to put the return out side the for loop
Your code so far
for (var i=0;i<contacts.length;i++) {
if (contacts[i].firstName === name) {
if (prop in contacts[i]) return {contacts[i][prop];}
else return ‘No such property’;
}
else return ‘No such contact’
}
// Setup
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){
// Only change code below this line
for (var i=0;i<contacts.length;i++){
if (contacts[i].firstName === name){
if (prop in contacts[i]) return contacts[i][prop];
else return 'No such property';
}else return 'No such contact'
}
// Only change code above this line
}
lookUpProfile("Akira", "likes");
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 OPR/68.0.3618.165.
I remember I had the same issue . The position of your else return "No such contact" is the problem. You don’t need to write else either.
If you have “Harry” as your name, your loop is going through and checking through the first object for firstname ===“Harry”. The first object is Akira. So it stops the loop there and says “no such contact” because Akira !== Harry.
What you want to do is return no such contact after the for loop has gone through all of the objects.