Profile Lookup dot vs bracket notation

Tell us what’s happening:
This code works, but I’m confused about dot vs bracket notation.
the line “return contacts[i][prop]” was originally “return contacts[i].prop”, and the code didn’t work.

Is there a rule against using dot notation to access a property when it is in the context of being a functions parameter? I had this issue on a similar problem a while back. I prefer using dot notation in most cases, but I don’t understand why it cant be used in this situation. Thanks!

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

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

Your browser information:

User Agent is: Mozilla/5.0 (X11; CrOS aarch64 11151.29.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.49 Safari/537.36.

Link to the challenge:
https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-javascript/profile-lookup

dot notation is useful if you already know what’s defined in your object and want to grab values using a specific key.

In this challenge, you are using a function and are passing a parameter to dynamically check for values in the object so it’s suitable to use bracket notation here because you can use variables to access values instead of explicit key names.

So return contacts[i].prop won’t work here because there are no objects with keys named ‘prop’.

That makes alot of sense. Thanks!