Basic JavaScript - Profile Lookup

Tell us what’s happening:
Describe your issue in detail here.

I’m sorry, the lesson keeps getting harder and harder.
I somehow cannot get the last requirement to go through even though I translate this line to code directly.

  • If firstName is found and no associated prop is found, you should return No such property.

The requirement I’m stuck atm is:
lookUpProfile("Akira", "address") should return the string No such property

I’m not sure where I go wrong here.

   **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) {
      return contacts[i][prop];
  }
  else if (contacts[i].firstName === name && contacts[i].hasOwnProperty(prop) == false) {
    return "No such property";
  }
}
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) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36

Challenge: Basic JavaScript - Profile Lookup

Link to the challenge:

Hi

Look at your first if statement:

if (contacts[i].firstName === name) {
      return contacts[i][prop];
  }

If the name matches, what does your code do?
(Remember - a return statement terminates the function.)

give the contacts property at that “i”?

Does return terminate the function when “else if” usually continues if the first condition is wrong until “else” ?

Yes - but if that “i” doesn’t have a matching property then it will return undefined.

Try this and see what’s returned.
console.log(lookUpProfile("Akira", "address"));

You’ll need to rethink your logic a little.
You can always post again here if you can’t figure it out.

I actually did check console.log(lookUpProfile(“Akira”, “address”)); before posting here.
And it is “undefined”.

So I guess you unintentionally answer for me why I kept getting undefined and where it comes from.

wait…but why can’t I continue with else if?
Why does
if (contacts[i].firstName === name) {
return contacts[i][prop];
}
giving me two results?

Is it because it every number of i it puts, it will bring out results hence the undefined when “i” not matched?

In the “Akira” example, your first if statement is true.
The name matches.

So the code inside that if block is executed.
And a return statement always terminates the function.

Well yes, if condition is met in the if, the return will return the result and terminate…
But anyway, since you mention that the if condition here going through [i] will give “undefined” when condition not met,…

I plug that hole. xD

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

lookUpProfile(“Akira”, “likes”);