IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Erreur javascript étrange (mise à jour de dictionnaires)


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mai 2016
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Erreur javascript étrange (mise à jour de dictionnaires)
    Bonjour à tous,

    je fais face depuis 2 jours à un problème pour lequel je ne trouve aucune solution. je viens donc vers vous afin de vous demander votre aide (ou du moins des pistes de recherches).

    Voici mon problème :

    je déclare un dictionnaire de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    var eleve = { 0 : {"nom" : "toto",
                               "absences" : { 0 : { "motif" : "maladie", 
                                                             "nombre": 1
                                                           },
                                                      1 : { "motif" : "rdv", 
                                                              "nombre": 1
                                                           }
                                                  }
                              },
                         1 : {"nom" : "titi",
                               "absences" : { 0 : { "motif" : "maladie", 
                                                             "nombre": 1
                                                           },
                                                     1 : { "motif" : "rdv", 
                                                              "nombre": 1
                                                           }
                                                  }
                              }
    };
    lorsque je souhaite augmenter le nombre d'absences pour maladie pour l'un des deux élèves, le nombre d'absences pour maladie est augmenté pour les deux élèves !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    eleve[0]["absences"][0]["nombre"] += 1;
    Avez vous une idée d'où peut venir le problème ?

    Merci d'avance !

    Cordialement et informatiquement,

    Alex

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 53
    Points : 85
    Points
    85
    Par défaut
    Salut, ton code fonctionne chez moi a priori

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    var eleve = { 0 : {"nom" : "toto",
    				   "absences" : { 0 : { "motif" : "maladie", 
    										"nombre": 1
    									  },
    								  1 : { "motif" : "rdv", 
    									    "nombre": 1
    									  }
    								}
    				  },
    			 1 : {"nom" : "titi",
    				   "absences" : { 0 : { "motif" : "maladie", 
    									    "nombre": 1
    									  },
    								  1 : { "motif" : "rdv", 
    									    "nombre": 1
    								      }
    							    }
    			     }
    			};
     
    console.log(eleve);
     
    {0: {}, 1: {}}
    0: absences: 0: {motif: "maladie", nombre: 1}1: {motif: "rdv", nombre: 1}__proto__: Objectnom: "toto"__proto__: Object
    1: absences: 0: {motif: "maladie", nombre: 1}1: {motif: "rdv", nombre: 1}__proto__: Objectnom: "titi"__proto__: Object__proto__: Object
     
    eleve[0]["absences"][0]["nombre"] += 1;
     
    console.log(eleve);
    {0: {}, 1: {}}
    0: absences: 0: {motif: "maladie", nombre: 2}1: {motif: "rdv", nombre: 1}__proto__: Objectnom: "toto"__proto__: Object
    1: absences: 0: {motif: "maladie", nombre: 1}1: {motif: "rdv", nombre: 1}__proto__: Objectnom: "titi"__proto__: Object__proto__: Object

    On a bien nombre a 2 dans l'eleve 0 et maladie a 1 dans l'eleve 1. Ce n'est pas ce que tu veux ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mai 2016
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Salut c'est exactement le résultat que je cherche.

    Cependant après plusieurs recherche (et pardon j'avais oublié de le souligner), la variable élève est construite dynamiquement en prenant l'héritage d'un tableau d'élèves et de motifs d'absences.

    après quelques recherches j'ai vu que le problème est que lorsque je modifie le nombre dans maladie il est également modifié dans le tableau de motifs d'absences

    je me demande bien comment la modification d'un objet héritant d'un tableau modifie également le tableau d'origine ? (ou alors je n'ai pas saisi quelque chose )

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 121
    Points
    44 121
    Par défaut
    Bonjour,
    c'est le soucis de pointage des variables dans le cas des tableaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var tableau = [1, 2, 3, 4];
    var autre = tableau;
    autre[1] = 'deux';
    alert(tableau);   // affichera 1,deux,3,4
    Il va te falloir faire une copie dans ce cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var autre = tableau.slice();
    autre[1] = 'deux';
    alert(tableau);   // affichera 1,2,3,4
    alert(autre);     // affichera 1,deux,3,4

  5. #5
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mai 2016
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    merci beaucoup pour cette réponse !

    je vais chercher de ce coté là du coup !

Discussions similaires

  1. Erreur lors de mise à jour
    Par FaridM dans le forum RedHat / CentOS / Fedora
    Réponses: 4
    Dernier message: 30/05/2011, 10h55
  2. [AC-2007] erreur dans la mise à jour introuvable
    Par franckimmo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/02/2010, 20h51
  3. Réponses: 6
    Dernier message: 31/05/2007, 21h29
  4. Erreur sur Requête Mise à Jour
    Par guenfood dans le forum Access
    Réponses: 1
    Dernier message: 06/06/2006, 08h51
  5. message d'erreur lors de mise à jour d'une BD access
    Par Abydos Business Group dans le forum Access
    Réponses: 2
    Dernier message: 25/01/2006, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo