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 :

Ma boucle for ne vas pas jusqu'à la fin


Sujet :

JavaScript

  1. #1
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 204
    Points : 123
    Points
    123
    Par défaut Ma boucle for ne vas pas jusqu'à la fin
    Bonjour,

    mon problème est que ma boucle for ne va pas jusqu'au bout pour lire toutes les valeurs d'un tableau.

    Voici le code javascript très simplifié du problème :

    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
     
    <script type="text/javascript">
     
    /*On crée un array qui contient 9 chiffres*/
    tableau = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
     
    /*On crée une fonction qui va servir supprimer toutes les valeurs d'un tableau passé en paramètre :*/
    function supprimerValeurs(array)
    {
    	/*On crée une copie de l'array, car c'est dans cette copie qu'on va supprimer toutes les valeurs :*/
    	copyArray = array;
     
    	/*On fait une boucle for sur le tableau array pour supprimer toutes les valeurs dans copyArray*/
    	for(j = 0; j < array.length; j++)
    	{
    		/*On supprime la valeur dans la copie copyArray*/
    		copyArray.splice(array.indexOf(j), 1);	
     
    		/*On affiche dans la console la progression de l'incrémentation :*/
    		console.log(j);	
    	}
    }
     
    /*On exécute la fonction pour supprimer toutes les valeurs du tableau*/
    supprimerValeurs(tableau);
     
    </script>
    Et après l'exécution de ce code, voici ce que j'ai dans la console :
    , alors que je devrais avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    0
    1
    3
    4
    5
    6
    7
    8
    9
    => donc ça veut dire que la boucle for s'arrête à 4 au lieu d'aller jusqu'au bout, càd jusqu'à 9.

    Apparemment, quand je commente la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    copyArray.splice(array.indexOf(j), 1);
    , ça va bien jusqu'au bout.

    Mais pourquoi ça ne va pas jusqu'au bout ?

    Merci d'avance, cordialement.

    PS : Je sais que je peux supprimer toutes les valeurs d'un tableau en faisant juste tableau = [];, mais je ne veux pas le faire, car dans le script complet, il y a d'autres traitements dans la boucle for en question.

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Erreur classique (mais t'inquiètes pas on l'a tous fait au moins une fois).

    Quand tu écris ceci :

    Tu ne créer pas une copie justement, copyArray et array sont le même tableau, ils pointent vers la même variable en mémoire. Donc quand tu fait une modification sur array, tu la fais également sur copieArray (c'est le même objet !).

    Une manière très simple afin de créer un véritable clone d'un tableau, qui ne référence pas le même objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var copyArray= array.slice(0);
    Autre remarque au passage, prends l'habitude de déclarer tes variables avec "var" (var copyArray = ..."), car sinon javascript considère que tu travail sur une variable globale, accessible à tout endroit dans le script (en gros copyArray peut-être utilisé en dehors de la fonction, ce que tu ne souhaites pas forcément).
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 204
    Points : 123
    Points
    123
    Par défaut
    Bravo, et merci pour ton aide. Tu as résolu le problème. C'est vrai que je me suis fait piégé en croyant que la copie d'un array pouvait se faire avec une simple affectation de variable.

    Merci encore.

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

Discussions similaires

  1. Boucle for avec un pas !
    Par yamatoshi dans le forum Général JavaScript
    Réponses: 29
    Dernier message: 08/04/2009, 12h32
  2. boucle "for" ne fonctione pas pourquoi ?
    Par flysurfer dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 24/04/2008, 13h48
  3. [SimpleXML] Boucle "for" n'affiche pas le résultat que je veux
    Par sasaas dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 20/02/2008, 16h05
  4. Boucle for ne marche pas
    Par ironzorg dans le forum SDL
    Réponses: 8
    Dernier message: 24/06/2007, 14h22
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 12h54

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