Ajout d'un contact


#1

Salut,
J'ai un problème avec l'ajout d'un contact dans mon repertoire.

voici mon code:


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

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

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

var contacts = [bob, mary, collins];

function affichePersonne(personne) {
console.log(personne.prenom + " " + personne.nom);
}

function liste() {
var longueurContacts = contacts.length;
for (var i = 0; i < longueurContacts; i++) {
affichePersonne(contacts[i]);
}
}

/*Créez une fonction de recherche
puis envoyez lui "Jones"*/

var recherche = function(nom) {
var nbrecontacts = contacts.length;
for (var i=0; i if(contacts[i].nom == nom) {
affichePersonne(contacts[i]);
}
}
}

//recherche ("Jones");

var ajout = function(prenom, nom, email, telephone) {
contacts[contacts.length] = prenom;
contacts[prenom].prenom = prenom;
contacts[prenom].nom = nom;
contacts[prenom].email = email;
contacts[prenom].telefone = telefone;
}

ajout ("Soeurette", "Bienvenue", "abce@sadsa.fr", "11313131212");

liste();
//affichePersonne(Collins);

Quand j'écris de la sorte, j'obtiens cette erreur: "TypeError: contacts[prenom] is undefined"

Quand je supprime ceci:
contacts[prenom].prenom = prenom;
contacts[prenom].nom = nom;
contacts[prenom].email = email;
contacts[prenom].telefone = telefone;
ma liste affiche bien entendu tous mes contacts excepté le dernier. à sa place il affiche undefined undefined

Merci pour votre aide


#2

var recherche = function(nom) {
var nbrecontacts = contacts.length;
for (var i=0; i if(contacts[i].nom == nom) {
affichePersonne(contacts[i]);
}
}
}

should be,

var recherche = function (nom) {
    var nbrecontacts = contacts.length;
    for (var i=0; i < nbrecontacts; i++) {
        if(contacts[i].nom == nom) {
            affichePersonne(contacts[i]);
        }
    }
}

And this function should create a new instance INSIDE the array, not a stand alone named object.

var ajout = function(prenom, nom, email, telephone) {
contacts[contacts.length] = prenom;
contacts[prenom].prenom = prenom;
contacts[prenom].nom = nom;
contacts[prenom].email = email;
contacts[prenom].telefone = telefone;
}

should be,

var ajout = function(prenom, nom, email, telephone) {
    contacts[contacts.length] = {
        prenom: prenom,
        nom: nom,
        email: email,
        telefone: telefone
    }
}

#3

Thank you very much.

ca marche. :grinning: :blush:


#4

ca fonctionne très bien. Je voudrais bien comprendre. Pourquoi est ce qu'il faut ecrire
contacts[contacts.length] = {}

Pour ajouter un élément à un array pourquoi ne pas tout simplement écrire:
contacts[] = {
}

L'élément serait ajouter à la dernière position. ou pas?

Merci pour explications


#5

Since arrays are indexed by offsets, the length of the array is the offset for the next available index. Consider,

var array = [1,2,3,4,5,6,7,8,9];
console.log(array[array.length]);      // ReferenceError: ... undefined
array[array.length] = { key: value };
console.log(array[9]);                 // { key: value }