Profile Lookup for loop is not iterating through the object

Profile Lookup for loop is not iterating through the object
0.0 0

#1

Tell us what’s happening:
It seems like my for loop is not looping through the length of the object. I am kinda confused. Can please anyone explain what is wrong with my code. It works just for the first object and for others it returns “No such contact”. Thank you in advance

Your code so far

// Only change code below this line
for (var x = 0; x < contacts.length; x++){
  
  if (contacts[x].firstName == firstName && contacts[x].hasOwnProperty(prop)){
    return contacts[x][prop];
    
  } else if (contacts[x].firstName != firstName){
    return "No such contact";
    
  } else if (!contacts[x].hasOwnProperty(prop)){
    return "No such property";
  }
}
// Only change code above this line
}

//Setup
var contacts = [
  {
        "firstName": "Harry",
        "lastName": "Potter",
        "number": "0994372684",
        "likes": ["Hogwarts", "Magic", "Hagrid"]
    },
  
    {
        "firstName": "Akira",
        "lastName": "Laine",
        "number": "0543236543",
        "likes": ["Pizza", "Coding", "Brownie Points"]
    },
    
    {
        "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
for (var x = 0; x < contacts.length; x++){
  
  if (contacts[x].firstName == firstName && contacts[x].hasOwnProperty(prop)){
    return contacts[x][prop];
    
  } else if (contacts[x].firstName != firstName){
    return "No such contact";
    
  } else if (!contacts[x].hasOwnProperty(prop)){
    return "No such property";
  }
}
// Only change code above this line
}

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

Your browser information:

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

Link to the challenge:


#2

You are correct, your code will only iterate through the first contact (object) in the contacts array. Why? Because during any given iteration, you return either contacts[x][prop], “No such contact”, or “No such property”. Remember, when the return statement is executed, the value specified is returned and the function immediately exits even if the for loop has not completely been iterated.

HINT: You are going to have to rethink your logic, so that you only return “No such contact” when you have iterated through the entire array.


#3

Thank you so much for the clarification, I understand that the loop was exiting the for loop once the if stament was true or false in my logic.