Je suis dans le 217ème défi de freecodecamp qui est la recherche de profil.

Ceci est la définition du problème

Nous avons un tableau d'objets représentant différentes personnes dans nos listes de contacts. Une fonction lookUpProfile qui prend firstName et une propriété (prop) comme arguments a été pré-écrite pour vous. La fonction doit vérifier si firstName est le prénom d'un contact réel et la propriété donnée (prop) est une propriété de ce contact. Si les deux sont vrais, renvoyez la "valeur" de cette propriété. Si firstName ne correspond à aucun contact, renvoyez "Aucun contact" Si l'accessoire ne correspond à aucune propriété valide, renvoyez "Aucune propriété de ce type"

J'en ai vu beaucoup utiliser l'opérateur d'égalité dans la boucle "if" mais je voulais le résoudre en utilisant la fonction "hasOwnProperty". Je ne sais pas où je vais mal.

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(firstName, prop){
// Only change code below this line
  for(var i=0; i<contacts.length; i++)
  {
    
if(contacts.hasOwnProperty(firstName) && contacts.hasOwnProperty(prop))
  {
    return contacts.prop;
  }
  return "No such property";
  }
// Only change code above this line
}

// Change these values to test your function
lookUpProfile("Akira", "likes");
1
puneeth8994 9 août 2016 à 21:10

7 réponses

Meilleure réponse

Vous devez comparer la valeur réelle de la propriété firstName, (contacts[i].firstName == firstName).

Voir plus de détails dans les commentaires.

Voici le code

// Code goes here

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(firstName, prop){
   // Only change code below this line
   for(var i=0; i<contacts.length; i++){
      // use i as array index, to access particular contact object
      if((contacts[i].firstName == firstName) && contacts[i].hasOwnProperty(prop)){
           //dot notation will not work here, use []
           return contacts[i][prop];
      }
      return "No such property";
    }
   // Only change code above this line
}

// Change these values to test your function
console.log(lookUpProfile("Akira", "likes"));
1
oKonyk 9 août 2016 à 18:33

Vous avez juste oublié de rechercher l'objet dans votre tableau, et non l'ensemble de votre tableau:

for(var i=0; i<contacts.length; i++) {

    var contact = contacts[i];

    if(contact.hasOwnProperty('firstName') && contact.hasOwnProperty(prop)) {
        return contact.prop;
    }

    return "No such property";

}
0
Gatsbill 9 août 2016 à 18:28

Le problème est que firstName dans la fonction lookUpProfile n'est pas une propriété. Il s'agit d'une valeur pour la propriété firstName.

Lorsque nous appelons lookUpProfile("Akira", "likes"), votre code essaie de vérifier si la propriété "Akira" existe dans les données (ce qui n'est pas le cas) et ne renvoie pas la propriété. Vous devez remplacer contacts.hasOwnProperty(firstName) dans votre instruction if par contacts.firstName === firstName

De plus, vous devez avoir un contact dans votre boucle:

var contact = contacts[i];
0
Arashsoft 9 août 2016 à 18:21
Here is the solution to this problem 

function lookUpProfile(firstName, prop){
    for (var i = 0; i < contacts.length; i++) {
        if (contacts[i].firstName == firstName && prop in contacts[i]) {
            return contacts[i][prop];
        } else if (!(firstName in contacts[i]) && i == (contacts.length - 1)) {
            return "No such contact";
        } else if ((typeof contacts[i][prop] == 'undefined')) {
            return "No such property";
        }
    }
0
Rajnish Kaushik 25 juil. 2017 à 21:54

Le code ci-dessus fonctionnera pour un cas de test mais pas pour tous ceux qui sont nécessaires pour réussir la session.

    function lookUpProfile(firstName, prop){
    for (i = 0; i < contacts.length; i++) {
        if (contacts[i].hasOwnProperty(prop)) {
            if (contacts[i].firstName == firstName) {
                return contacts[i][prop];
            }
        }
        else {
            return "No such property";
        }
    }
    return "No such contact";
    }
0
merz 5 déc. 2016 à 15:17
  1. Vous ne faites pas référence au contact unique dans la boucle contacts[i]
  2. correction de l'instruction if pour comparer le prénom
  3. Vous devez obtenir la valeur de la propriété à partir d'une variable comme ci-dessous
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(firstName, prop){
// Only change code below this line
  for(var i=0; i<contacts.length; i++)
  {
    
if(contacts[i].firstName == firstName && contacts[i].hasOwnProperty(prop))
  {
    //return contacts[i].prop;
     alert(contacts[i][prop]);
  }
  //return "No such property";
   alert("No such property");
  }
// Only change code above this line
}

// Change these values to test your function
lookUpProfile("Akira", "likes");
0
M B 9 août 2016 à 18:29
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 printValues(){
    for(var a = 0; a< contacts.length; a++){
        contacts[a].firstName;
    }   
}

function isNameExist(name ){
    for(var a = 0; a< contacts.length; a++){
        if (contacts[a].firstName == name)
            return true
    }
    return false;
}

function isPropertyExist(prop){
    for(var a = 0; a< contacts.length; a++){
        if (contacts[a].hasOwnProperty (prop))
            return true
    }
    return false;
}

function lookUpProfile(name, prop){
// Only change code below this line

        if(!isNameExist(name)){
            return "No such contact";
        }else if(!isPropertyExist(prop)){
            return "No such property";
        }

         for(var a = 0; a< contacts.length; a++){
        if(contacts[a].firstName == name && contacts[a].hasOwnProperty(prop)){
                return contacts[a][prop];
            }   
        }
}
// Only change code above this line

// Change these values to test your function
lookUpProfile("Akira", "likes");
-1
sai teja 12 juil. 2018 à 16:15