Help with Profile Lookup Challenge problem

I’m having a problem in this challenge.

My code passes every test except these tests:

lookUpProfile("Bob", "number") should return the string No such contact

lookUpProfile("Bob", "potato") should return the string No such contact

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

lookUpProfile("Akira", "likes");

I want to know why those tests fail.

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

Challenge: Profile Lookup

Link to the challenge:

Your problem is to do with the function nameScan try follow your recursive function taking note of the value of i if you remember list indexes start at zero in javascript you should be able to debug the logic in your function so that it does things correctly.

Thank you for your reply. Value of i starts with 0 and it should increase by 1 each time before the function calls itself again. I still can’t define the problem.

The function does do this correctly except there is an error, it overflows so that i would in one instance have a value of 4, can you see why this would be a problem in your code, or where an error would arise. I tested for the values of i by doing this at the start of your nameScan function alert(i)

I solved the problem. The problem was here: else if (i < contacts.length) . I changed it to i < 3 and it worked. I still need explanation why contacts.length doesn’t give me 3. The array has 4 objects total and it should count from 0 to 3 right?

I would recommend really simplifying this logic

Keep it simple.

Check every contact in a simple loop

If the current contact’s name matches, check for the property

Return the correct value/statement based on if the property matches

Otherwise, if you don’t find the matching name, return what you’re supposed to in that case

One loop. Two if statements.

1 Like

Thank you for your reply. I was aware there are simple solutions yet i wanted to learn what i was doing wrong :smiley: It appears contacts.length was not starting counting from 0 and it was 4 while i was thinking it was giving me 3.

Yeah, and that sort of this is hard to see in more complex code. As a general rule, the more more complex the code, the harder it is to find the bugs.

1 Like