Profile Lookup- Don't understand why it doesn't work

Profile Lookup- Don't understand why it doesn't work
0.0 0

#1

Tell us what’s happening:

I understand the solution, but I don’t understand why my code doesn’t work. It worked before I added " if (contacts[i].firstName != firstName) {
return “No such contact”;} "

When I add this, even the first if clause stops working. I get the nested ifs, and I get that it would work if I just used else instead of this new if clause, but I don’t get why this doesn’t work as well. Can someone please enlighten me? :slight_smile: Thank you so much!

Your code so far

//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(firstName, prop){
// Only change code below this line

for (var i= 0; i < contacts.length; i++)  {
 if (contacts[i].firstName == firstName) {
if (contacts[i].hasOwnProperty(prop)){
  return contacts[i][prop];}
else if (contacts[i][prop] != prop){
return "No such property";}}
if (contacts[i].firstName != firstName) {
return "No such contact";}}
}


// Change these values to test your function
lookUpProfile("Akira", "cats");

Your browser information:

Your Browser User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36.

Link to the challenge:


#2

The are a couple of things that are causing your code to fail.

  1. placement of the return "No such contact"- when you use return, it will stop the function and break out of loops etc. By using the return in the for loop, you are not checking through each person in the contacts array. It needs to be:
for (var i....) {
//code to check the array
}
return //if northing is found in array
  1. your code is throwing a typeerror for names that do not exist.
    You can’t look up contacts[i].firstName if it doesn’t exist so javascript will throw a typeerror and not run the comparison, hence why your code will work with when using else.

Hope this helps :slightly_smiling_face:

Edit: it’s definitely is the first one, My second point is an example of why you should take breaks regularly (i.e me)!


#3

I think the second firstName check will return from the function with “No such contact”, first time through the loop. Could that be why it doesn’t work? If firstName isn’t the first contact, it will never be found, i.e. loop will only ever complete one iteration.

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].hasOwnProperty(prop)){
                return contacts[i][prop];
            } else if (contacts[i][prop] != prop){
                return "No such property";
            }
        }
        // this causes function to return first loop iteration
        if (contacts[i].firstName != firstName) {
            return "No such contact";
        }
    }
}

#4

thank you, it does help!


#5

Yeah I think it’s one of the problems. Thank you!