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 :

Changer une valeur dans un objet sans qu'il y ait répercussion sur un même autre objet


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 33
    Points : 21
    Points
    21
    Par défaut Changer une valeur dans un objet sans qu'il y ait répercussion sur un même autre objet
    Bonjour !

    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
     
    var twoObjects = [
        {
        	name: 'computer',
        	age: 5
     
        },
     
        {
        	name: 'chair',
        	age: 10
        }
     
    ],
     
         myObjects = [];
     
     
    myObjects.push(twoObjects[0], twoObjects[0], twoObjects[1]);
    alert(myObjects[0].age + " " + myObjects[1].age);
    myObjects[0].age = 10;
    alert(myObjects[0].age + " " + myObjects[1].age);
    Dans le code au dessus, je change l' age de 1er "computer" (myObjects[0].age) pour qu'il ait 10 ans mais ca change aussi l'age de mon deuxième "computer" (myObjects[1].age)
    Est-il possible de ne changer que l'age du premier ou pas ?
    merci

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    JavaScript manipule toujours les objets via leurs références, et ne les copie jamais implicitement. En l’occurence, tu places deux références vers le même objet dans ton tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myObjects.push(twoObjects[0], twoObjects[0], twoObjects[1]);
    Dans la mémoire du moteur JS, les objets sont simplement des zones de données. Les variables de ton code sont des noms permettant au moteur de retrouver l’emplacement des objets en mémoire. Ça sera sans doute plus clair avec un schéma :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                              Mémoire JavaScript
                        +---------------------------+
                        |     ,----------------.    |
    twoObjects[0] ----------->|    un objet    |<--------+------ myObjects[0]
                        |     `----------------´    |    |
                        |                           |    `------ myObjects[1]
                        |                           |
                        |     ,----------------.    |
    twoObjects[1] ----------->| un autre objet |<--------------- myObjects[2]
                        |     `----------------´    |
                        |                           |
                        |            ...            |
    Pour avoir deux objets différents, tu dois copier explicitement le premier. Pour faire ça, tu peux utiliser la fonction Object.assign() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    myObjects.push(
      Object.assign({}, twoObjects[0]),
      Object.assign({}, twoObjects[0]),
      Object.assign({}, twoObjects[1])
    );
    drick35 a récemment posé une question similaire à la tienne, j’y avais fait cette réponse.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Merci infiniment pour votre réponse rapide qui m'aide beaucoup !
    Merci aussi pour le schéma (qui m'a permis de comprendre et qui m'est très utile pour ne pas répéter mon erreur deux fois) !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Changer une url dans un objet embed sans recharger la page
    Par Kalidor62 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 19/11/2014, 12h56
  2. [Débutant] Afficher une valeur dans un objet Static Text
    Par bart31400 dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 26/06/2007, 09h22
  3. [Débutant] Changer une valeur dans une autre base
    Par Cyphen dans le forum Access
    Réponses: 5
    Dernier message: 18/08/2006, 15h26
  4. Modifier une valeur dans un fichier sans passer par l'éditeur
    Par elkhy dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 09/06/2006, 00h15
  5. Modifer une valeur dans un panier sans la valider
    Par budiste dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/03/2006, 09h53

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