Profile Lookup with forEach

Tell us what’s happening:
Why my code returns undefined? help

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
return contacts.forEach(function(obj) {
    if (obj["firstName"] == name) {
        if (obj.hasOwnProperty(prop)){
            return obj[prop];
        }else{
            return "No such property"
        }
    }else{
        return "No such contact";
    }
});

// Only change code above this line
}

// Change these values to test your function
console.log(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/78.0.3904.108 Safari/537.36.

Challenge: Profile Lookup

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

Because the return statements inside the forEach method do not return values back to the main calling function.

So I have to obligatorily do it with a For loop?

You could do normal for loop, a for of loop, use a recursive solution, write a complicated solution using the reduce method, or you could still use the forEach method with different logic.

Ooookey, and what would be the correct logic to use forEach?

According to MDN (https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Array/forEach) , the return value of forEach is undefined, so I think I understood what you mean.

That means the easiest way is with a for loop. I could also do it by the methods you mentioned, but I think it’s easier with a For loop. :joy::joy::joy:

First see if you can solve it without the forEach and then I will show you.

Show me your magic, Mr. Randell. please!!!

function lookUpProfile(name, prop) {

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

I sent you a DM with the forEach solution.