Whats is different between these solutions

1------

//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].hasOwnProperty(prop) === true){
          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");

2-----

//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 && contacts[i].hasOwnProperty(prop) === true){
        return contacts[i][prop];
  
    } else if(contacts[i].hasOwnProperty(prop) === false){
             return "No such property";
   }    
  }return "No such contact";
 
  // Only change code above this line
}

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

this one showing and error :

"Bob", "potato" should return "No such contact"

i need to understand the logic.

Your braces are incorrect in #2, so return "No such contact"; doesn’t happen until after the for loop.

1 Like

Most problems with this challenge that I’ve seen involve accidentally returning “no such contact” before actually testing all contacts. Your function #2 is incorrect but for a different reason.

Both loop through all contacts before determining that there is “no such contact”. That is good.

The first loops through contacts and only tests for a property match if/when that contact is found.

The second loops through contacts testing each for two conditions
if (name does match and property does match) and in the else clause (property does not match)
so that the first contact (with any name) that does not have that property returns “no such property”

That is why the second function fails on lookUpProfile("Bob", "potato")
Akira does not match name and does not match property (so if condition false)
but
Akira does not have property potato (so else condition true)
so “No such property” is returned and the function exits

Not the expected response.