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 :

push() : modifie le tableau d'origine ?!


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2005
    Messages : 277
    Par défaut push() : modifie le tableau d'origine ?!
    Bonjour,

    Dans la doc, push() retourne la taille du tableau et n'est pas censé modifier le tableau "parent".

    Voici le code :
    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 obj = {                 
        data : [{x : 100}]
    };
     
    var result = {                   
        data : []
    }; 
     
     
    for(var i = 0;i < obj.data.length;i++){ 
     
        result.data.push(obj.data[i]);
     
        console.log(obj.data[i].x+' '+result.data[i].x);
     
     
        result.data[i].x = 200;
     
        console.log(obj.data[i].x+' '+result.data[i].x);
     
    }
    Mon premier console.log() affiche : 100 100
    Le second console.log() affiche : 200 200

    Pourquoi le tableau obj.data est modifié ?

    Merci d'avance pour votre aide !

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    push est supposé ajouter un element dans le tableau ... pas retourner sa taille
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2005
    Messages : 277
    Par défaut
    Il ajoute un élément, modifie la taille du tableau et retourne la nouvelle taille (je viens de retester) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log(obj.data.push('test'));
    ==> Retourne 2...

    Mais c'est pas le problème

    Mon code est inutile mais c'est pour l'exemple!

    Je copie obj.data dans result.data.
    Je modifie la valeur de result.data[i].
    Ce qui entraine une modification sur obj.data[i] ..

    :s

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2005
    Messages : 277
    Par défaut
    Le problème vient de la structure de mes objets !

    Le push() doit copier l'adresse de data[i] et non le contenu...

    Si je passe tout en tableau, ca se comporte normalement...

    Comment faire ca du coup :s
    Et ne proposez pas de tout passer en tableau mdr

  5. #5
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result.data.push({x:obj.data[i].x});

    ou plus globalement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var newObj = {};
    for(var k in (obj.data[i])
    	newObj[k] = obj.data[i][k];
    result.data.push(newObj);

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2005
    Messages : 277
    Par défaut
    Merci pour ta réponse.

    Sauf que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      result.data.push({x:obj.data[i].x});
    m'oblige à connaitre la structure de data[i]...

    Voici ma proposition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result.data.push(JSON.parse(JSON.stringify(obj.data[i])));

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

Discussions similaires

  1. [Tableaux] Modifier un tableau sur une page en PHP
    Par leclone dans le forum Langage
    Réponses: 12
    Dernier message: 02/01/2007, 14h06
  2. Modifier un tableau avec innerHTML sous IE
    Par Gédéon dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/12/2006, 12h32
  3. Réponses: 11
    Dernier message: 14/10/2006, 21h26
  4. [Debutant] Besoin d'aide pour modifier un tableau...
    Par CyberTwister dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/03/2006, 14h14
  5. modifier un tableau avec javascript
    Par lemmings dans le forum Général JavaScript
    Réponses: 27
    Dernier message: 15/11/2005, 10h10

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