Profile Lookup - How come one combining if statments doesn't work?

Profile Lookup - How come one combining if statments doesn't work?
0

#1

Tell us what’s happening:
Earlier I was taught that you could combine two if statements into one by using logic operators such as &&. In this challenge I’ve written two sets of code, one which works and one which doesn’t. How come the first solution (which in my mind should mean the same thing since I’m checking whether name and prop are true) doesn’t work but the second solution does?

Your code so far

function lookUpProfile(name, prop){
// Only change code below this line
    for (var i = 0; i < contacts.lenght; i++) {
        if (contacts[i].firstName == name && contacts[i].hasOwnProperty(prop)) {
            return contacts[i][prop];
        } else {
            return "No such property";
        }
    } return "No such contact";
// Only change code above this line
}

// ---------------------------------------------

function lookUpProfile(name, prop){
// Only change code below this line
    for (var i = 0; i < contacts.length; i++) {
        if (contacts[i].firstName == name) {
            if (contacts[i][prop]) {
                return contacts[i][prop];
            } else {
                return "No such property";
            }
        }
    } return "No such contact";
// Only change code above this line
}

//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.lenght; i++) {
        if (contacts[i].firstName == name && contacts[i].hasOwnProperty(prop)) {
            return contacts[i][prop];
        } else {
            return "No such property";
        }
    } return "No such contact";
// Only change code above this line
}

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

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0.

Link to the challenge:
https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-javascript/profile-lookup/


#2

I’ve edited your post for readability. When you enter a code block into a forum post, please precede it with a separate line of three backticks and follow it with a separate line of three backticks to make easier to read.

See this post to find the backtick on your keyboard. The “preformatted text” tool in the editor (</>) will also add backticks around text.

Note: Backticks are not single quotes.


#3

The logic is different in your two functions.

In the first (where you use &&), you return "No such property" any time that either contacts[i].firstName == name is false or contacts[i].hasOwnProperty(prop) is false.

In the second, you return "No such property" if contacts[i].firstName == name is true and contacts[i][prop] is false.


#4

Ohhhhhhhhhh. I get it now. Thank you so much :slight_smile: Also thank you for the formatting tip, first time posting so I was unaware. I’ll make sure to do it right the next time!