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 :

Valeurs d'un tableau modifiées en sortie de boucle for


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Valeurs d'un tableau modifiées en sortie de boucle for
    Bonjour à toutes et tous.

    Tout ou presque est dit dans le titre. Voilà le problème : j'essaie de récupérer des données "GET" avec un script. Quand je vérifie à l'intérieur de la boucle "for" où je crée le tableau final à deux dimensions, chaque ligne contient bien des valeurs différentes; quand je vérifie de nouveau dans une autre boucle, toutes les lignes contiennent les mêmes valeurs, qui sont celles de la dernière ligne.
    J'ai essayé plusieurs méthodes: création préalable des variables, création dynamique des variables; remplissage du tableau avec une regexp; analyse des valeurs "GET" puis remplissage d'un tableau intermédiaire simple puis remplissage du tableau à deux dimensions; exécution de toutes ces actions dans une seule fonction; exécution de chaque sous-ensemble d'actions dans des fonctions séparées. dans tous les cas le résultat est le même: lors de la création du tableau bidimensionnel tout semble correct, lors de sa relecture les valeurs sont modifiées.

    Voici le code de la dernière version de mon script:

    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
    34
    35
    36
    37
    38
    39
    <SCRIPT LANGUAGE="JavaScript1.2">
    function delocaliser() {
      brut = window.location.href;
      brut = brut.substr(brut.indexOf('?')+1);
      document.write(brut+'<br>');
      decoffre = brut.split('&')
      return decoffre;
      }
     
    function decomposer(parm, lng) {
      var recomposer = new Array(lng);
      for ( x = 0; x < lng; x++)
          recomposer[x] = new Array(2);
      for (x = 0; x < lng; x++) {
          tableautmp = parm[x].split('=');
          document.write('Paramètre '+x+' = '+parm[x]+'<br>');
          document.write('Longueur de tableautmp = '+tableautmp.length+'<br>');
          document.write('tableautmp[0] = '+tableautmp[0]+'; tableautmp[1] = '+tableautmp[1]+'<br>');
          recomposer[x,0] = tableautmp[0];
          recomposer[x,1] = tableautmp[1];
          document.write('recomposer['+x+',0] = '+recomposer[x,0]+'; recomposer['+x+',1] = '+recomposer[x,1]+'<br>');
          }
      document.write('Longueur de recomposer = '+recomposer.length+'<br>');
      for (x = 0; x < recomposer.length; x++) {
          document.write('recomposer['+x+',0] = '+recomposer[x,0]+'; recomposer['+x+',1] = '+recomposer[x,1]+'<br>');
          }
      return recomposer;
      }
     
    function tuturer() {
      tableausimple = delocaliser();
      document.write('Longueur de tableausimple = '+tableausimple.length+'<br>');
      for (x = 0; x < tableausimple.length; x++)
          {
          document.write('Élément de tableausimple '+x+' = '+tableausimple[x]+'<br>');
          }
      tableau = decomposer(tableausimple, tableausimple.length);
      }
    </SCRIPT>
    Et voici ce que j'obtiens en sortie de l'exécution de "tuturer" lancé avec onLoad (URL = [chemin]tutures.htm?preunch=on&deuss=va&troiss=voir) :

    preunch=on&deuss=va&troiss=voir
    Longueur de tableausimple = 3
    Élément de tableausimple 0 = preunch=on
    Élément de tableausimple 1 = deuss=va
    Élément de tableausimple 2 = troiss=voir
    Paramètre 0 = preunch=on
    Longueur de tableautmp = 2
    tableautmp[0] = preunch; tableautmp[1] = on
    recomposer[0,0] = preunch; recomposer[0,1] = on
    Paramètre 1 = deuss=va
    Longueur de tableautmp = 2
    tableautmp[0] = deuss; tableautmp[1] = va
    recomposer[1,0] = deuss; recomposer[1,1] = va
    Paramètre 2 = troiss=voir
    Longueur de tableautmp = 2
    tableautmp[0] = troiss; tableautmp[1] = voir
    recomposer[2,0] = troiss; recomposer[2,1] = voir
    Longueur de recomposer = 3
    recomposer[0,0] = troiss; recomposer[0,1] = voir
    recomposer[1,0] = troiss; recomposer[1,1] = voir
    recomposer[2,0] = troiss; recomposer[2,1] = voir

    Bien entendu, la lecture de la variable "tableau" de la fonction "tuturer" donne le même résultat que la relecture de "recomposer".

    Si quelqu'un pouvait m'éclairer sur la manière de remédier à ce problème, ça serait excellent, et me l'expliquer, ça serait formidable !
    Merci d'avance pour toute aide.

  2. #2
    Membre confirmé Avatar de 01001111
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 319
    Points : 509
    Points
    509
    Par défaut
    recomposer[x,0] est incorrect.
    si recomposer[x] est un tableau, il faut accéder à l'élément d'index 0 ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var v=recomposer[x][0];
    De plus, tu utilises new Array(length) pour initialiser un tableau, ça n'a je crois pas beaucoup d'utilité. Ce serait plus simple ainsi:
    enfin, pourquoi utilises-tu Javascript 1.2?
    Javascript 1.5 serait un minimum. Il est peut-être plus propre, de moins point de vue de n'utiliser qu'un type mime.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript"></script>

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Solution impeccable
    Merci, 01001111, c'était bien le problème, du coup ça marche comme souhaité et je vais pouvoir nettoyer le script en faveur d'un code plus compact.
    (edit)
    Version revue du script, y compris les affichages de vérification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <SCRIPT TYPE="text/javascript">
    function tuturer() {
      brut = window.location.href.substr(window.location.href.indexOf('?')+1);
      document.write('brut = '+brut+'<br>');
      tableau = brut.split('&')
      document.write('<pre>Longueur de tableau = '+tableau.length+'\n');
      for (x = 0; x < tableau.length; x++) {
          document.write('Élément de tableau '+x+' = '+tableau[x]+'; \t');
          tableau[x] = tableau[x].split('=');
          document.write('tableau['+x+'][0] = '+tableau[x][0]+'; tableau['+x+'][1] = '+tableau[x][1]+'<br>');
          }
      }
    </SCRIPT>
    Et le résultat est bien celui souhaité:

    brut = preunch=on&deuss=va&troiss=voir
    Longueur de tableau = 3
    Élément de tableau 0 = preunch=on; tableau[0][0] = preunch; tableau[0][1] = on
    Élément de tableau 1 = deuss=va; tableau[1][0] = deuss; tableau[1][1] = va
    Élément de tableau 2 = troiss=voir; tableau[2][0] = troiss; tableau[2][1] = voir

    Bien évidemment, ceci n'est qu'un test, le but étant de créer un script qui insère des références d'objets (images, animations) passées en paramètre "GET".

    Merci encore, 01001111.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/05/2014, 11h47
  2. Réponses: 6
    Dernier message: 29/10/2013, 14h32
  3. Utilisations des tableaux en sortie de boucle for
    Par TSI06 dans le forum LabVIEW
    Réponses: 2
    Dernier message: 28/06/2010, 20h24
  4. récupération de valeur d'un tableau au sein d'une boucle!
    Par wiama dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/05/2010, 15h36
  5. probleme de resultat en sortie de boucle for
    Par afssaLERH dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/10/2007, 16h16

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