Profile Lookup Exercise - Basic Javascript

Profile Lookup Exercise - Basic Javascript


why can’t it be ==. Because even if if converts to string we don’t really care.


I tried with === this time with this code:

for (var i = 0; i < contacts.length; i++) {

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

else {
  return "No points";


it still returns “No points”


Yep, i’m just little snoozy, hasOwnProperty() takes a prop as argument, but you have an array there, but in your first post, you have it correct and when i run it, its working fine for the elements that don’t match, but it doesn’t work for inputs that match


Ok, i removed the [] from it. it still returns the same.


prop is a string and contacts[i].hasOwnProperty(prop) returns a boolean value of true or false, so they will not be equal. Unless prop is “true” or “false” string values, the comparison will evaluate to false.



This returns a boolean value, but you have compared it with prop, check whether it is true, you will get the result which you expect now


ok i’ll try now and let you know.


Ok now it works. Thanks a lot. It got really confusing there.
I need to understand one more thing. Why is the return “No such contact” outside the for loop? Is there any other way to do this?


Only once you have made it through the entire contacts array (without a return statement executing) can you know for sure the contact does not exist.


Alright. Thanks for clarifying.


Just one more thing. Could I have done it without using Nested if?
If i could go on with my style of code and evaluate the two statements in one if? Will i get the desired output?


I do not see that you are currently using a nested if. If you have code with a nested if, you will need to post it first, so I can answer your question.

Currently, your code has a single if statement with two conditions. A nested if would look like:

if (some condition) {
  if (another condition) {



Here’s my new code. I am almost there. Every check is passed except for one:

function lookUpProfile(name, prop){
// Only change code below this line

for (var i = 0; i < contacts.length; i++) {

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

else if (contacts[i].hasOwnProperty(prop) !== true) {
    return "No such property";


return "No such contact";
// Only change code above this line

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


I am getting this error: “Bob”, “potato” should return “No such contact”


That is correct, because your first if statement evaluates to false, so your else if statement is evaluated next. Since prop is “potato” and the first contact (contacts[0]) does not have a “potato” property, you return “No such property” and the function exits.

EDIT: I would suggest a nested if like the one I showed in a previous reply. The outer if would make sure the firstName property matches name. The inner if would check if the property exists for that object.


Ok. So how do i fix it?


See my edited last response.


Ok, so basically the nested if is inevitable. Thanks.


Not inevitable. You can solve it with an if/else if statement, but you would be repeating the same condition name == contacts[i].firstName, which makes the code not as concise and less readable.


Yes, that’s true. Well I have to admit. This was the toughest challenge in Basic Javascript.