Partage
  • Partager sur Facebook
  • Partager sur Twitter

Passage d'argument tableau par valeur

il me le passe par référence...

Sujet résolu
    13 novembre 2010 à 16:19:28

    salut!

    un problème de JS se présente à moi...
    j'ai un tableau rempli avec un for, avec des nombres de 0 à 99.
    j'ai une fonction de mélange de tableau.
    normalement je devrai faire
    tableau_melangé = melange(tableau);

    sauf que ça modifie tableau...

    function melange_stoine(tableau) {
    	// avantages : plus rapide ?
    	// inconvénients : obligé de faire plein de fois pour bien mélanger
    	//var tableau = new Array();
    	//tableau = t;
    	var nb_elements = tableau.length;
    	var courrant = tableau[0];
    	var prochain = null;
    	for(i=0;i<(nb_elements*2);i++) {
    		hasard = parseInt((nb_elements-1)*Math.random())+1;
    		prochain = tableau[hasard];
    		tableau[hasard] = courrant;
    		courrant = prochain;
    	}
    	tableau[0] = courrant;
    	return tableau;
    }
    
    var t = new Array();
    for (i=0;i<100;i++) 
    	t[i] = i;
    
    var t2 = new Array();
    for (i=0;i<100;i++) 
    	t2[i] = i;
    
    var t3 = melange_stoine(t2);
    
    for ( i in t) document.write("<tr><td>" + t[i] + "</td><td>" + t2[i] + "</td><td>" + t3[i] + "</td></tr>");
    


    voilà... et ça m'affiche le premier tableau (nombres de 0 à 99, dans l'ordre), puis le deuxième, mélangé, alors qu'il n'aurait pas du être mélangé, et le troisième,mélangé (normal)

    je ne parviens vraiment pas à comprendre pourquoi il me modifie le tableau passé en argument...

    voilà voilà!

    merci à ceux qui comprendront le problème !

    ciao!
    • Partager sur Facebook
    • Partager sur Twitter
      13 novembre 2010 à 16:54:04

      C'est ta fonction melange qui foire.
      Les variables t2 et t3 ne contiennent pas le tableau en lui-même, mais une référence (=une adresse) vers celui-ci. Donc si tu modifie l'un tu modifie l'autre.
      Tu dois donc crée une copie de t2 dans ta fonction de mélange :

      function melange_stoine(tableauOriginal) {
          var tableau = tableauOriginal.concat();
      


      Cette fois tu travaille bien avec un nouveau tableau.

      PS: Arrête de déclarer tes tableaux avec new Array(), utilise la notation littérale :

      var t = [];
      


      Et lis ceci, document.write() c'est moche.
      • Partager sur Facebook
      • Partager sur Twitter
        16 décembre 2010 à 17:17:05

        salut!
        j'avais pas répondu, mais j'ai utilisé :)

        merci encore!
        • Partager sur Facebook
        • Partager sur Twitter

        Passage d'argument tableau par valeur

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown