Profile Lookup - problems with for loop

Hi campers,

I am struggling with this Basic Javascript challenge. The code runs successfully if the function looks up the first item in the object (“Akira”) and returns the array of likes. However, when the function has the other firstNames as parameters, it keeps returning “No such contact”. Which means there is something wrong with my for loop. Could you point me in the right direction after taking a look at my code?

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];
        }
            return "No such property";
}
    else {
        return "No such contact";
}
}
// Only change code above this line
}

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

Your browser information:

User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36.

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

First, it helps to make your code more readable if you indent your code as follows:

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];
			}
			return 'No such property';
		} else {
			return 'No such contact';
		}
	}
	// Only change code above this line
}

OK, now it is easier to see, that your for loop will only ever make one iteration. Why? Because in the first iteration you return one of three things (contacts[i][prop], ‘No such property’, or ‘No such contact’.

Hint: You need to think about when you should return ‘No such contact’.

1 Like

return inside a for loop exits the function and won’t continue the loop.

Knowing that, run through your logic again but this time focus on what happens if you want the 2nd contact.

1 Like

I have solved this by moving the “No such contact” statement outside of the for loop. Thank you both!

1 Like

Indentation makes everything clearer!