Effacer les éléments d'un tableau associatif

Effacer les éléments d'un tableau associatif - HTML/CSS - Programmation

Marsh Posté le 06-04-2005 à 22:56:33    

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

Reply

Marsh Posté le 06-04-2005 à 22:56:33   

Reply

Marsh Posté le 08-04-2005 à 01:07:25    

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

Reply

Marsh Posté le 08-04-2005 à 23:59:36    

up ;o)

Reply

Marsh Posté le 09-04-2005 à 01:07:32    

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
Reply

Marsh Posté le 09-04-2005 à 17:26:47    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed