Profile Lookup challenge not passing

Tell us what’s happening:
Can someone tell me why this isn’t passing? The errors are saying that the values for the existing props are not being returned. However, when I console.log before the return statement, it is returning/logging Akira’s “likes” just fine.

  **Your code so far**

// Setup
const 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 (let i = 0; i < contacts.length; i++)
{
  if (contacts[i].firstName == name)
    {
      if (contacts[i].hasOwnProperty(prop))
        {
          console.log(contacts[i][prop]);
          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 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0

Challenge: Profile Lookup

Link to the challenge:

As soon as any return statement is encountered, your function immediately stops, even if it’s in the middle of a loop.

Why isn’t it returning the prop values?

Because you always return on your first loop iteration.

Yes, I return the prop values because it said to do so if the name matches and if the person has that prop.

What happens if the very first name does not match?

It returns “No such contact”.

Is that what you want though? When do you want to say that no contact matches?

I want it to say that when there’s no match.

Yes. But when do you know that you have no match? After you have checked the very first name?

after checking all of the objects in the array

I agree. So why is the return statement for no matching contacts inside of the loop that checks all contacts?

Because it seemed natural to put that else statement outside of the related if statement. I wrote it as the instructions seemed to read (if…, else…).

But it isn’t quite a related if statement. The if statement talks about one single contact.

I get the gist of what you’re saying. So, I got rid of that “else” and removed a couple of brackets, and moved the return to the end and now it’s passing.

There you go! Mixing loops and boolean logic can be tricky sometimes!

Thank you. I appreciate your time and assistance.

1 Like