"Undefinided"


#1

Bonjour

J'ai un problème avec l'exercice "3. Afficher des informations sur nos contacts"

Voici mon code :

var bob = {
    prenom : "Bob",
    nom : "Jones",
    telephone : "01 23 45 67 89",
    email: "bob.jones@exemple.com"
};

var marie = {
    prenom : "Marie",
    nom : "Johnson",
    telephone : "02 34 56 78 91",
    email: "marie.johnson@exemple.com"
}

var contacts = ['bob','marie'];

var affichePersonne = function(personne) {
    console.log(personne.prenom + ' ' + personne.nom);
    return(personne.prenom + ' ' + personne.nom);
}

affichePersonne(contacts[0]);
affichePersonne(contacts[1]);

J'ai suivis toutes les instructions mais la fonction affichePersonne me renvois toujours "undefinided undefinided"


#2

essaye de faire AffichePersonne(contacts.nom[0]);


#3

Retire les simples quotes dans la définition de ta variable 'contacts' :

var contacts = ['bob','marie'];

Devient

var contacts = [bob,marie];

Si tu ne fais pas ça, ton array "contacts" ne contiendra que deux chaines de caractère au lieu de deux objets (bob et marie).

De plus, tu n'as pas besoin de 'return' dans ta fonction 'affichePersonne'


#4

Effectivement les simples quotes étaient le problème

Comment la fonction interprète son argument dans les cas :

  • var contacts = [bob,marie];

  • var contacts = ['bob','marie'];

Merci pour vos réponses


#5

Dans ton ancien cas :

var contacts = ['bob','marie'];

Tu créés un array contenant deux chaines de caractères : 'bob' et 'marie'.
Ensuite tu appelles la fonction affichePersonne avec comme argument soit 'bob', soit 'marie' (qui sont donc des strings). Dans ta fonction, tu demandes d'afficher 'bob'.prenom, ce qui ne veut rien dire pour la machine :
elle attend quelque chose de la forme "objet.propriété". Or, un objet n'est pas un string mais une variable.

Résultat des comptes : tu dois remplacer tes strings par des variables dans ton array 'contacts'.

Dans ce cas ça donne :

var contacts = [bob,marie];

Tu as un array contenant deux variables précédemment définies : bob et marie.
Cela donne grosso modo :

var contacts = [
var bob = {...},
var marie = {...}
]

Tu appelles ensuite ta fonction 'affichePersonne()'. Celle-ci affiche le prénom et le nom de l'argument c'est à dire le prénom et le nom de l'objet 'bob' (ou de l'objet 'marie'). Tout se passe bien :smile:

J'espère que mon explication est claire


#6

Oui très claire !

Merci pour votre aide à tous


#8

var bob = {
prenom : "Bob",
nom : "Jones",
telephone : "01 23 45 67 89",
email: "bob.jones@exemple.com"
};

var marie = {
prenom : "Marie",
nom : "Johnson",
telephone : "02 34 56 78 91",
email: "marie.johnson@exemple.com"
};
var contacts = [bob, marie];
var affichePersonne = function(personne){
console.log(personne.prenom + " " + personne.nom);
};
for(var i = 0; i < contacts.length; i++){
affichePersonne(contacts[i]);
};