He estado atrapado aquí por un tiempo y verifiqué otras soluciones que coincidían perfectamente con la mía. Pero parece que no puedo encontrar el error en mi código, ya que sigue diciendo ...
// running tests lookUpProfile("Kristian", "lastName") should return the string Vos lookUpProfile("Sherlock", "likes") should return ["Intriguing Cases", "Violin"] lookUpProfile("Harry", "likes") should return an array // tests completedEste es el reto...
const 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"], }, ];Mi código...
function lookUpProfile(name,prop){ for (let i = 0; i < contacts.length; i++){ if (contacts[i].firstName === name && contacts[i].hasOwnProperty(prop)){ return contacts[i][prop]; } else if (contacts[i].firstName === name && !contacts[i].hasOwnProperty(prop)){ return "No such property"; } return "No such contact"; } // Only change code above this line } lookUpProfile("Akira", "likes");Los parámetros de prueba
lookUpProfile("Kristian", "lastName") should return the string Vos lookUpProfile("Sherlock", "likes") should return ["Intriguing Cases", "Violin"] lookUpProfile("Harry", "likes") should return an array lookUpProfile("Bob", "number") should return the string No such contact lookUpProfile("Bob", "potato") should return the string No such contact lookUpProfile("Akira", "address") should return the string No such propertyPor favor, me alegraría mucho si alguien pudiera ayudarme a abrir los ojos.
Estaba finalizando prematuramente su función si no encontró el contacto en la primera iteración. Estuvo cerca de hacerlo funcionar:
const 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) { for (let i = 0; i < contacts.length; i++) { if (contacts[i].firstName === name && contacts[i].hasOwnProperty(prop)) { return contacts[i][prop]; } else if (contacts[i].firstName === name && !contacts[i].hasOwnProperty(prop)) { return "No such property"; } } return "No such contact"; // Only change code above this line } console.log( lookUpProfile("Kristian", "lastName") ); console.log( lookUpProfile("Sherlock", "likes") ); console.log( lookUpProfile("Harry", "likes") ); console.log( lookUpProfile("Bob", "number") ); console.log( lookUpProfile("Bob", "potato") ); console.log( lookUpProfile("Akira", "address") );Le recomiendo que use Array.prototype.find() , el encadenamiento opcional (?.) y el operador de fusión nula (??) .
const 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) { const profile = contacts?.find(contact => contact.firstName === name); return profile?.[prop] ?? "No such property"; } const results = [ lookUpProfile("Kristian", "lastName"), // should return the string Vos lookUpProfile("Sherlock", "likes"), // should return ["Intriguing Cases", "Violin"] lookUpProfile("Harry", "likes"), // should return an array lookUpProfile("Bob", "number"), // should return the string No such contact lookUpProfile("Bob", "potato"), // should return the string No such contact lookUpProfile("Akira", "address"), // should return the string No such property ]; results.forEach(result => console.log(result));