Search code examples
javascriptarraysobject

Profile lookup on freecode camp checkpoint


So I'm going through freecodecamp and I'm solving the problems there, to keep in the loop with the programming and I've stumbled on a snag, and I'm not quite sure what's wrong.

So I have an array of objects called contacts, and I need to create a function called lookUp(firstName, prop). The text of the assignment is like this:

The function should check if firstName is an actual contact's firstName and the given property (prop) is a property of that contact.

If both are true, then return the "value" of that property.

If firstName does not correspond to any contacts then return "No such contact"

If prop does not correspond to any valid properties then return "No such property"

The code:

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": ["Intruiging Cases", "Violin"]
    },
    {
        "firstName": "Kristian",
        "lastName": "Vos",
        "number": "unknown",
        "likes": ["Javascript", "Gaming", "Foxes"]
    },
];


function lookUp( firstName, prop ){
  for( var i = 0; i < contacts.length; i++ ){
    if( contacts[i].firstName == firstName ) {
      if( contacts[i].hasOwnProperty( prop ) ) {
        return contacts[i].prop;
      } else {
        return "No such property";
      }
    } else {
      return "No such contact";
    } 
  }
}

// Change these values to test your function
lookUp("Kristian", "lastName");

So I'm looping through the array with for loop checking each object. In the first if I check if the firstName property of that objects equals the function parameter firstName, then if it's true, I check if the object has the property prop, and I should be able to return it. But it seems that

return contacts[i].prop;

is not working, and I'm kinda lost as to why. I'm sure it's something trivial, but I don't see why. When I go to console, and test

contacts[0].likes

I get out the array ["Pizza", "Coding", "Brownie Points"], but in my if that's not working. What am I doing wrong here?

EDIT

Ok so I tried with

function lookUp( firstName, prop ){
  for( var i = 0; i < contacts.length; i++ ){
    if( contacts[i].firstName == firstName ) {
      if( contacts[i].hasOwnProperty( prop ) ) {
        return contacts[i][prop];
      } else {
        return "No such property";
      }
    } else {
      return "No such contact";
    } 
  }
}

But I still get the same error :\


Solution

  • Ok I'm dumb, I exited my for loop too early:

    function lookUp( firstName, prop ){
      for( var i = 0; i < contacts.length; i++ ){
        if( firstName == contacts[i].firstName ) {
          if( contacts[i].hasOwnProperty( prop ) ) {
            return contacts[i][prop];
          } else {
            return "No such property";
          }
        }
      }
      return "No such contact";
    }
    

    This works.