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 :

Manipulation ARRAY en javascript


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 145
    Par défaut Manipulation ARRAY en javascript
    Bonjour,
    Pour javascript, je ne comprends pas le comportement qu il a à propos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    let command_line = 'C’est la première abdication au Japon depuis plus de deux siècles.';
    console.log('commande 1 :' + command_line);
     
    let new_command_line = command_line.split(' ');
    let options = command_line.split(' ');
     
    console.log('options.shift() 2 :' + options.shift());
    console.log('commande 2 :' + new_command_line[0]);
    Les résultats sont les suivants :
    > "commande 1 :C’est la première abdication au Japon depuis plus de deux siècles."
    > "options.shift() 2 :C’est"
    > "commande 2 :C’est"

    Le résultat de options.shift() n'est pas correcte, il devrait supprimer la première clés et garder les autres !?

    Deuxième chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    let command_line = 'C’est la première abdication au Japon depuis plus de deux siècles.';
     
    console.log('commande 1 :' + command_line);
    let new_command_line = command_line.split(' ');
    console.log('commande 2 :' + new_command_line);
     
    let options = new_command_line;
    console.log('options 1 :' + options);
    options.shift();
    console.log('options 2 :' + options);
    console.log('commande 3 :' + new_command_line);
    Résultat :
    > "commande 1 :C’est la première abdication au Japon depuis plus de deux siècles."
    > "commande 2 :C’est,la,première,abdication,au,Japon,depuis,plus,de,deux,siècles."
    > "options 1 :C’est,la,première,abdication,au,Japon,depuis,plus,de,deux,siècles."
    > "options 2 :la,première,abdication,au,Japon,depuis,plus,de,deux,siècles."
    > "commande 3 :la,première,abdication,au,Japon,depuis,plus,de,deux,siècles."

    Je ne comprends pas pourquoi commande 3 "new_command_line" à pris la valeur de "options"
    Et comment peut on éviter que "new_command_line" soit modifié

    Cordialement
    Drick

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

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Bonsoir,
    tes deux problèmes sont liés, dans le premier cas tu as des copies là où tu t’attends à avoir des références, et dans le second cas c’est l’inverse.

    Premier cas, tu appelles deux fois command_line.split(' '). La méthode split() renvoie un nouveau tableau à chaque appel, tu as donc deux tableaux différents, même s’ils ont été créés de la même façon. Tu peux utiliser l’opérateur de comparaison stricte === ou bien Object.is() pour voir si deux variables sont des références sur le même objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log( Object.is(new_command_line, options) ); // false
    Second cas, tu fais explicitement un passage de référence ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let options = new_command_line;
    En réalité il y a peu de situations en JS où l’opérateur d’affectation = va faire une copie. Il ne le fait que pour les valeurs primitives, c’est-à-dire les nombres ("number"), les booléens ("boolean"), les chaînes ("string"), les symboles ("symbol"), et undefined. Tout le reste est considéré comme objet : les objets littéraux { ... }, les tableaux, les fonctions, etc.
    Et tous les objets sont passés par référence quand tu utilises =, ainsi ils ne sont pas copiés. Voici un exemple simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let a = {};
     
    let b = a; // passage de référence
     
    b.reponse = 42;
    console.log(a.reponse); // 42
    Pour copier un tableau, tu dois demander explicitement qu’une copie soit faite. Un des moyens est Array.from() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let options = Array.from(new_command_line); // copie explicite
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Citation Envoyé par dirck35
    Le résultat de options.shift() n'est pas correcte, il devrait supprimer la première clés et garder les autres !?
    La méthode shift() supprime bien la première clef d'un tableau mais lorsque que tu l'appliques, elle renvoie l'élément supprimé. Si tu affiches console.log(options) après avoir fait options.shift() tu obtiendras bien le tableau options sans son premier élément.

    Pour la deuxième chose, Watilin a déjà donné l'explication.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 145
    Par défaut
    Merci

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

Discussions similaires

  1. [DOM] Comment remplir un champ de type array via Javascript ?
    Par tavarlindar dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 29/04/2008, 12h50
  2. problem array en javascript
    Par sissa_87 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 04/05/2006, 12h13
  3. manipuler css en javascript ?
    Par michaelbob dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/03/2006, 17h49
  4. Utilisation des Array en javascript serveur
    Par clisson dans le forum XMLRAD
    Réponses: 4
    Dernier message: 13/06/2005, 15h46

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