Basic JavaScript - Profile Lookup

Tell us what’s happening:

I cannot understand why it does not work! I have read almost every post on the forum, and I don’t see any trouble with my code. I have console logged every step of the function, and still it does not provide any return after the for loop, even though it obviously gets there with only two possible outcomes. There is still an error. I have run it in the VS code - it is working, please explain why it is wrong?

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 && contacts[i].hasOwnProperty(prop)) {
      return contacts[i][prop];
    } else if (contacts[i]['firstName'] === name) {
      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/119.0.0.0 Safari/537.36 Edg/119.0.0.0

Challenge Information:

Basic JavaScript - Profile Lookup

Why did you pick these loop bounds? Double check if that’s the bounds you want.

2 Likes

I have almost gone mad because of this mistake! Maybe I just got tired. The morning brought your answer and great attitude, and everything worked as it should. Thank you very much!

1 Like

This code may work but it is confusing to read.

if (contacts[i]['firstName'] === name && contacts[i].hasOwnProperty(prop)) {
  return contacts[i][prop];
} else if (contacts[i]['firstName'] === name) {
  return 'No such property';
}

The else if has implicit logic that isn’t all that obvious.

Compare it to this

if (contacts[i]['firstName'] === name) {
  if (contacts[i].hasOwnProperty(prop)) {
    return contacts[i][prop];
  } else {
    return 'No such property';
  }
}

It is much more explicit about why 'No such property' is returned.


This might not be a huge deal with so little code, but boolean logic is already easy to get confused by. The more code you have the worse it gets. I would suggest you be as explicit in your boolean logic as possible.

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.