Profile Lookup using .length to calculate the length of a property array is returning .length undefined

Tell us what’s happening:

Not sure why .length is not working? i understand i should use …hasownproperty to check against input rather than cycling though each property and checking for matches.

Anyone know whats wrong with my logic?

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
var i=0;
  for (var x=0;x<contacts.length;x+=1){
    for (var y=0;y<contacts[prop].length;y+=1){
    if (firstName==contacts[x].firstName){
      if (prop==contacts[x][y]){
        while (i<contacts[x][prop].length) 
        console.log (contacts[x][prop][i]);
        ++i;  
      }
      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 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36.

Link to the challenge:

Let’s just focus on this piece of code for now:

for (var x=0;x<contacts.length;x+=1){
    for (var y=0;y<contacts[prop].length;y+=1)

What exactly do you expect contacts[prop] to be?

Assuming we called your function as:

lookUpProfile("Akira", "likes");

prop === 'likes'
contacts[prop]  // you are looking for element in the array with index `likes`... which does not exists.

See the flaws in your logic?

I believe you wanted to some something like:

for (var x=0;x<contacts.length;x+=1){
  contact[x][props] // "Pizza", "Coding", "Brownie Points"
}

where you look into contacts[index number][property name] :slight_smile: