SELFHTML

Forum SELFHTML: Archives:
Remise a Zero d'un tableau

Page d'information: vue d'ensemble
vers le bas 

(JAVASCRIPT) Remise a Zero d'un tableau

Le message suivant est de: David, 29. 09. 2004, 16:58
http://www.site-en-stock.net/

Lut tout le monde!

Pour un programme en javascript(dans une application en XUL càd pour Mozilla), j'aurais besoin de remettre a zero (càd qu'il n'y a plus aucun element, donc montableau.length=0) un objet de type Array(). J'ai essaye la solution que je pensais elegante:

var montableau = new Array();
function raztableau()
{
for(var i=0;i<montableau.length;i++)
   {
    montableau.pop();
   }
}
mais enfer et damnations a chaque fois il me reste 5 elements dans mon tableau. arghhh!!

j'ai une solution qui fonctionne mais elle me gene c'est:

montableau.length = 0;

ca me gene parce que la propriete length n'est accessible qu'en lecture pas en ecriture (source: http://fr.selfhtml.org/javascript/objets/array.htm#length)
bug de mozilla? ou c'est moi qui sait pas programmer en javascript? (arrff a peine envisageable ;-) )

@+
David


--
Get Firefox!
http://www.mozilla-europe.org/fr/products/firefox/
Avec ça vous allez voir ce qu'est un vrai navigateur web...


 

vers le hautvers le bas 

(JAVASCRIPT) Remise a Zero d'un tableau

Le message suivant est de: Celelibi, Adresse électronique sysygogo86@msn.com, 29. 09. 2004, 20:55
http://www.espionet.com

»» Lut tout le monde!
Lut tout seul!

»» J'ai essaye la solution que je pensais elegante:
»» [le code]
»» mais enfer et damnations a chaque fois il me reste 5 elements dans mon tableau. arghhh!!
bizzar autant qu'étrange.
»» j'ai une solution qui fonctionne mais elle me gene c'est:
»»
»» montableau.length = 0;
»»
»» ca me gene parce que la propriete length n'est accessible qu'en lecture pas en ecriture (source: http://fr.selfhtml.org/javascript/objets/array.htm#length)
regarde aussi ce qui est écrit là : http://fr.selfhtml.org/javascript/objets/array.htm#pop

moi je te propose tout simplement ça :

var tontableau = new Array();
function raztableau {
  tontableau = new Array();
}

si avec ça il te reste encore des éléments dans ton tableau c'est que la vérité est ailleur.

sinon tu peux aussi essayer ça :
fonction raztableau {
  while (tontableau.length) {
    tontableau.pop();
  }
}
je trouve cette dernière solution assez élégante, mais qui vu ton bug risquerai de donner une boucle infinie. :p




hum...
après un fort réfléchissement, j'en déduis que tu as fais ton test avec un tableau de 10 éléments ;)
en effet au départ tontableau.length = 10, mais à chaque appel de la méthode pop(), la propriété length est décrémenté, donc la valeur de i et de length varient comme ça :
0 10
1 9
2 8
3 7
4 6
5 5
6 4 <-- la condition de la boucle n'est plus vérifie, la boucle s'arrête.

si tu veux reprendre ta fonction raztableau() il faut que tu sauvgarde la longueur de ton tableau avant de faire la boucle.

les erreurs les plus connes sont les plus difficiles à repérer. :)


@+
Celelibi qui garde son statu de maitre du JavaScript. ;)


 

vers le hautvers le bas 

(JAVASCRIPT) Remise a Zero d'un tableau

Le message suivant est de: David, 30. 09. 2004, 08:35
http://www.site-en-stock.net/

»» regarde aussi ce qui est écrit là : http://fr.selfhtml.org/javascript/objets/array.htm#pop

je cite "Pour les navigateurs qui ne connaissent pas la méthode pop(), vous pouvez retirer le dernier élément en affectant au tableau une nouvelle taille, par exemple avec nombres.length=nombres.length-1" On m'aurait menti? holalalala.....
»»
»» moi je te propose tout simplement ça :
»»
»» var tontableau = new Array();
»» function raztableau {
»»   tontableau = new Array();
»» }

simple et efficace va marche nickel, je fais garder ca pour RaZ plusieurs tableau qui n'ont pas la meme longueur.
»»
»» si avec ça il te reste encore des éléments dans ton tableau c'est que la vérité est ailleur.

Desole Scully ca marche tres bien :-))

»» sinon tu peux aussi essayer ça :
»» fonction raztableau {
»»   while (tontableau.length) {
»»     tontableau.pop();
»»   }
»» }
»» je trouve cette dernière solution assez élégante, mais qui vu ton bug risquerai de donner une boucle infinie. :p

non j'ai essaye ca marche tres bien aussi pas de boucle infinie
»»
»» hum...
»» après un fort réfléchissement, j'en déduis que tu as fais ton test avec un tableau de 10 éléments ;)
»» en effet au départ tontableau.length = 10, mais à chaque appel de la méthode pop(), la propriété length est décrémenté, donc la valeur de i et de length varient comme ça :
»» 0 10
»» 1 9
»» 2 8
»» 3 7
»» 4 6
»» 5 5
»» 6 4 <-- la condition de la boucle n'est plus vérifie, la boucle s'arrête.

bien vu ;-) mon tableau faisait bien 10 de longueur, mais j'ai pas pensé qu'il remetait a jour la valeur de montableau.length, donc forcement a la 6eme boucle les conditions etaient remplies la boucle for s'arrete, ceci aurait fonctionner:

var montableau = new Array();
var longueurtableau = montableau.length
function raztableau()
{
for(var z=0;z<longueurtableau;z++)
   {
   montableau.pop();
   }
}

»» Celelibi qui garde son statu de maitre du JavaScript. ;)
Tes challengers sont rassures.

@+
David

--
Get Firefox!
http://www.mozilla-europe.org/fr/products/firefox/
Avec ça vous allez voir ce qu'est un vrai navigateur web...


 


vers le haut

© 1998-2004 Adresse électronique selfhtml@fr.selfhtml.org