Profile lookup checking

Both conditions are correct but one overrides the other, how can i make it so when the fist condition is false it checks for the other condition. i tried else if but it overrides the first condition, maybe instead of for loop it should be a different loop idk

  **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(name == contacts[i]['firstName']){
    if(contacts[i][prop]){
        return contacts[i][prop];
     
 }
}else if(name !== contacts[i]['firstName']){
    return "No such contact";

}
}
// Only change code above this line
}

lookUpProfile("Akira", "likes");
  **Your browser information:**

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

Challenge: Profile Lookup

Link to the challenge:

I think the problem is in the second if statement where you use the !== operator instead of !=. That must be why your second condition is not running

No, it is preferable to use !==. (Also preferable to use ===)

The issue is that your code will stop the very first time it encounters a return, so you will only check one contact.

You are right. It is better to assign the response to a variable and return the result outside the loop.

Yeah, that would work. Or moving one return statement. Might be other ways too. Whichever feels more natural to @jaime.tavekz

i feel like if i assign the response to a variable that would make the code more complicated then it has to be.

i’ll try your way :slightly_smiling_face:

It might. But one way or another you need to only return ‘No Such Contact’ only happens after you check every contact.

== vs === have specific uses separate from each other, it isn’t fair to simply say it’s preferable without an explanation

yeah i noticed most times i’m not sure which one to use as they both seems similar. is === use when it is strict and u don’t expect the data to change types?

To be exact, you should generally use ===.

The === operator is a strict comparison. It checks that your two values are the same value and type.

The == operator is a weak comparison. It checks that your two values have the value, but it may do a type conversion for you.

== may produce unintended results if you aren’t very careful, so I always recommend ===.

There is a difference. The === compares the value and type of variables, while == only compared the value. checkout this link

https://www.w3schools.com/js/js_comparisons.asp

Also when accessing the objects I use bracket notation because i’m thinking the input is changed then it can be flexible. Am i correct i’m not sure if using the bracket notation or the dot notation on my conditions , which one is the right one.

You’re right, in this case you’ll need bracket notation. Dot notation only works when you have the exact property name when witing the code.

considering you know your object keys. both of them work just fine. It depends on your preference