Profile Lookup - Do I have to use hasOwnProperty?

Profile Lookup - Do I have to use hasOwnProperty?
0

#1

Tell us what’s happening:
I have a nested if statement that checks to see if the array’s object has a particular property. I do this by placing the the object’s array inside the if parentheses hoping it will evaluate to true or false, but it won’t seem to work. Here is my syntax: if (contacts[i][prop]). prop is a parameter from the function.
The solution I saw requires me to use the method hasOwnProperty. Why won’t my reference to that property return false if it doesn’t have the property?

Your code so far

//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(firstName, prop){
// Only change code below this line
for (var i = 0; i<contacts.length; i++ ){
  if (contacts[i].firstName === firstName){
    if (contacts[i][prop]){
      return contacts[i].prop;
    } else { return "No such property";}
  }else { return "No such contact";}
}
// Only change code above this line
}

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

Your browser information:

Your Browser User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36.

Link to the challenge:


#2

Your if statement involving the contacts[i][prop] is not necessarily the issue with your code. I took your existing code and placed some console.log statements in at specific places, for you to test on your end and see if you get something different than what you expected.

Once you solve the problem you will notice after using the console.log statements, then I will answer your original question in detail.

function lookUpProfile(firstName, prop){
  // Only change code below this line
  for (var i = 0; i<contacts.length; i++ ){

    console.log('checking ' + contacts[i].firstName + ' ...');

    if (contacts[i].firstName === firstName){

      console.log(contacts[i][prop]);

      if (contacts[i][prop]){
      
        console.log('got here');
        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
}