Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1147 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Effacer les éléments d'un tableau associatif

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Effacer les éléments d'un tableau associatif

n°1038191
Zapco
Posté le 06-04-2005 à 22:56:33  profilanswer
 

Bonjour,
 
Comment effacer un ou tous les éléments d'un tableau associatif en javascript?

mood
Publicité
Posté le 06-04-2005 à 22:56:33  profilanswer
 

n°1039586
Zapco
Posté le 08-04-2005 à 01:07:25  profilanswer
 

j'ai toujours pas trouvé, qq a une idée?

n°1040844
Zapco
Posté le 08-04-2005 à 23:59:36  profilanswer
 

up ;o)

n°1040895
cerel
Posté le 09-04-2005 à 01:07:32  profilanswer
 

Bon d'apres une rapide recherche voila ce qui en sort.
 
Afin d'effacer un ou plusieurs elements d'un tableau, tu peux utiliser la methode "splice".
Cette dernier prends plusieurs arguments.
splice(index, combien [, valeur1, valeur2])
 
Voila un petit exemple :

Code :
  1. var arr = new Array(1,2,3,4);
  2. arr.splice(1,1); // efface 1 element a partir de l'index 1
  3. print(arr); // 1, 3, 4
  4. arr.splice(1, 1, 6, 7);
  5. print(arr); // 1, 6, 7, 4


 
Voila, avec cette methode tu peux effacer (et meme remplacer) des elements dans un tableau.
Mais il ne faut pas crier victoire trop tot. En effet, cette methode fonctionne pour des elements "normaux".
Or dans un tableau associatif, les elements ne sont pas "normaux". Ils ne possedent pas d'index.
En realite, javascript va creer des "proprietes" a la volee dans ton tableau.
En gros :

Code :
  1. var arr = new Array('a','b');
  2. arr['c']=10;
  3. arr['d']=20;
  4. print(arr); // affiche : 'a', 'b'
  5. // les elements 'c'=>1 et 'd'=>2 n'apparaissent pas.
  6. // En revanche si l'on fait :
  7. props(arr); // On obtiens : 0,1,c,d
  8. // Ce qui veut dire, que 0,1,c,d sont des "proprietes" de notre var arr
  9. // Cela veut egalement dire qu'en realite, les indices des tableaux
  10. // sont en realite des proprietes.
  11. print(arr.0); // 'a'
  12. print(arr.1); // 'b'
  13. print(arr.c); // 10
  14. print(arr.d); // 20


Cela nous permet de savoir un peu plus comment javascript traite les tableaux et tableaux associatifs.  
Pour lui c'est la meme chose.
On peut egalement remarque, que si l'on fait un splice(1,1), alors l'element 'b' est efface.  

Code :
  1. arr.splice(1,1);
  2. props(arr); // 0, c, d


Cela nous montre que la fonction splice a reussi a effacer la propriete 1 de l'objet arr.
 
Il serait donc possible d'effacer la "cle=>val" d'un tableau associatif.
 
Suite de notre enquete...
 
Apres une petite recherche voila ce qu'il en ressort :
 
Pour effacer une propiete d'un objet, on peut utiliser l'operateur "delete".
Pour ce faire, il suffit de faire
delete(objet.propriete);
Testons :

Code :
  1. delete(arr.c); // true
  2. props(arr); // 0, d
  3. // Faisons un petit test :
  4. delete(arr['d']); // true
  5. props(arr); // 0


 
Et voila, il suffit d'utiliser delete pour effacer les elements d'un tableau associatif.
Quelques remarques :
1) Il ne faut pas utiliser delete pour effacer des elements "normaux" (lire des elements avec indice) d'un tableau. En effet, delete ne modifie pas la propriete "length" du tableau. Il en resulte une valeur fausse. En revanche il est a noter que splice se charge bien de modifier la valeur de length.
2) Les elements de type "associatif" dans un tableau ne sont pas "comptabilises". En gros, la propriete length d'un tableau qui ne comporte que des elements associatifs sera toujours 0.
3) Il est possible de melanger des types associatifs et des elements "normaux" dans un meme tableau.
4) (2+3) S'il faut absolument pouvoir obtenir le nombre d'elements de type "assosciatif" via length, on pourrais alors imaginer de creer un fonction "length" qui comptabiliserais le nombre de "proprietes" que possede le tableau. On utiliserai pour se faire une boucle de type "for x in this". Attention tout de meme, cette methode ne ferais pas distinction entre valeurs "normales", valeurs associatives, et meme des fonctions ou proprietees supplementaires (la methode length serait elle meme comptee) (je vous renvoi a la doc qui se trouve sur le net concernant les possibilitees objet de javascript).
 
Pour finir je tiens a dire ceci :
Lorsque je suis tombe sur le sujet, je n'avais aucune idee de comment effacer les elements d'un tableau associatif. Voyant que l'auteur n'avait toujours pas recu de reponse, j'ai donc decide de faire quelques petites recherches afin de l'aider.
Voila mes recherches :
Google -> "javascript delete an array element"
  Sur le premier liense trouve les elements du debut de ma reponse (cf splice, fonction que je connaissais pas)
Une fois que j'ai appris que les elements associatifs etaient des proprietees j'ai lance une autre recherche :
Google -> "javascript delete an object property"
  Sur le premier lien se trouve les elements de la deuxieme partie de ma reponse.
Les remarques concernant les problemes lies a l'utilisation de delete pour des elements "normaux" ont ete trouves sur le 4e lien de la premiere recherche.
 
On remarque donc qu'une simple recherche m'a permis de repondre a la question.
Je dirais meme plus, j'ai mis plus de temps a ecrire mon message, qu'a faire la recherche, lire l'article, trouver le code, et faire des tests en local avec un shell javascript ...
 
La morale de l'histoire : Faites une recherche, cela vous fera gagner du temps.
 
(Bon faut dire aussi que j'ai appris quelque chose grace a la "non recherche" de l'auteur :p)
 
Allez, cette fois ci c'est la fin, voila un petit lien tres utile :
http://www.squarefree.com/bookmarklets/webdevel.html


Message édité par cerel le 09-04-2005 à 01:39:45
n°1041423
Zapco
Posté le 09-04-2005 à 17:26:47  profilanswer
 

Merci pour ta réponse hyper détaillé. J'avais effectivement trouvé la fonction splice, mais comme tu le dis elle ne marche pas avec un tableau associatif. Sinon, j'ai une autre question sans réponse ici http://forum.hardware.fr/hardwaref [...] 7713-1.htm


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Effacer les éléments d'un tableau associatif

 

Sujets relatifs
[excel] tableau championnat?VB.NET : Appel d'un tableau d'un autre formulaire
C++ : Effacer une zone mémoire à une adresse donnéeMacro tableau croisé dynamique en vb
taille d'un tableaupb IE/FF tableau couleur
Tableau en HTML ?!Tableau en Gtk
Tableau [ Espace ]Probleme avec tableau de chaines...
Plus de sujets relatifs à : Effacer les éléments d'un tableau associatif


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR