Una función lookUpProfile que toma un nombre y una propiedad (prop) como argumentos ha sido escrita previamente para mí.
Si ambos son verdaderos, devuelva el "valor" de esa propiedad.
Si el nombre no corresponde a ningún contacto, devuelva la cadena No hay tal contacto.
Si prop no corresponde a ninguna propiedad válida del contacto que coincida con el nombre, devuelva la cadena No such property.
por qué no funciona si uso && en lugar de la instrucción if anidada
// Setup 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) { // Only change code below this line for (let i = 0; i <= contacts.length; i++) { if (contacts[i].firstName === name && contacts[i].hasOwnProperty(prop)) { return contacts[i][prop]; } else return "No such contact"; } return "No such contact"; // Only change code above this line } lookUpProfile("Akira", "likes"); function lookUpProfile(name, prop) { for (let x = 0; x < contacts.length; x++) { if (contacts[x].firstName === name) { if (contacts[x].hasOwnProperty(prop)) { return contacts[x][prop]; } else { return "No such property"; } } } return "No such contact"; }function lookUpProfile(name, prop) { // Only change code below this line for (let i = 0; i <= contacts.length; i++) { if (contacts[i].firstName === name && contacts[i].hasOwnProperty(prop)) { return contacts[i][prop]; } else return "No such contact"; } return "No such contact"; // Only change code above this line }Esta función siempre devolverá "No existe tal contacto" si contactos[0] no es el valor que desea obtener.
El siguiente código funcionará.
function lookUpProfile(name, prop) { // Only change code below this line for (let i = 0; i <= contacts.length; i++) { if (contacts[i].firstName === name && contacts[i].hasOwnProperty(prop)) { return contacts[i][prop]; } } return "No such contact"; // Only change code above this line }el problema son estas lineas
if (contacts[i].firstName === name && contacts[i].hasOwnProperty(prop)) { return contacts[i][prop]; } else return "No such contact"; básicamente está diciendo que si las condiciones dadas no coinciden, devuelva la función con 'No such contact' . Esto significa que el ciclo deja de iterar después de la primera iteración. Ahora, dado que se devuelve la función, el bucle finaliza, lo que significa que solo está comprobando el primer índice, es decir [0] .