Profile Lookup -- is nesting IF statements necessary?

Tell us what’s happening:

I am having trouble understanding why my code for the “Profile Lookup” exercise does not work. (It only partially works.) The real difference between my code and the Solution is that the solution uses nested if/else statements. Why does that make a difference? Are the nested IF statements necessary for some reason?

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

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

// Only change code above this line
};

// Change these values to test your function
lookUpProfile("Sherlock", "likes"); 
//should return ["Intriguing Cases", "Violin"]

Your code only checks the first contact in the list. It looks at contacts[0] and either returns the property value, “No such contact”, or “No such property” without ever moving on to contacts[1].

1 Like

I just completed this code challenge earlier today.

@ArielLeslie directly points out the issue with your code. I would add that it’s not too far off from the solution.

If you’re in need of a push in the right direction, consider this:

  • What conditions need to be evaluated during your loop?
    • When do you want your ‘No’ cases to trigger?
  • When do you want to return (and break out) of your function or your loop and when do you want it to continue?

Thanks so much for your help. I now see what you mean about my code always meeting one of the conditions and returning (and stopping the function) with the first iteration.

Part of the problem, I realize, is that I was not fully writing out the third condition:
If prop does not correspond to any valid properties of a contact found to match name then return “No such property”

When I rewrote that part as

if (contacts[i].firstName === name && !contacts[i].hasOwnProperty(prop))

then I could see why nesting would make sense.

Thanks again for your help!

1 Like