Clés de tables de hachage
Le
Yliur

Bonjour
J'ai tâché d'utiliser des tables de hachage en javascript. Enfin le
machin qui en tient lieu, avec des associations clé/valeur.
Quelque chose comme ça :
var table = {} ;
table['truc'] = 'coucou' ;
J'arrive à m'en servir sous cette forme, ça fonctionne. Par contre j'ai
voulu utiliser ce système pour mémoriser les éléments html déjà traités
lors d'un parcours d'arbre du DOM et là ça s'est moins bien passé : La
première fois table[elt] renvoie bien faux (elle est vide), mais toutes
les fois suivantes l'expression renvoie vrai, quel que soit l'élément
html qui lui est présenté.
Est-ce que ce système ne fonctionne qu'avec certains types de données
pour les clés ? Ou je me suis juste planté quelque part ?
Ensuite j'ai essayé de placer les éléments dans un tableau et de
parcourir le tableau quand on nouveau nœud est traité pour voir s'il
s'y trouve déjà. le résultat a été le même, dès le deuxième tous les
éléments présentés ont été trouvés dans le tableau. Ça c'est encore
plus bizarre, je me dis que j'ai dû me planter dans mon test mais comme
je ne sais pas bien comment fonctionnent les comparaisons je voulais
m'assurer que je ne loupe pas un truc.
Merci
Yliur
J'ai tâché d'utiliser des tables de hachage en javascript. Enfin le
machin qui en tient lieu, avec des associations clé/valeur.
Quelque chose comme ça :
var table = {} ;
table['truc'] = 'coucou' ;
J'arrive à m'en servir sous cette forme, ça fonctionne. Par contre j'ai
voulu utiliser ce système pour mémoriser les éléments html déjà traités
lors d'un parcours d'arbre du DOM et là ça s'est moins bien passé : La
première fois table[elt] renvoie bien faux (elle est vide), mais toutes
les fois suivantes l'expression renvoie vrai, quel que soit l'élément
html qui lui est présenté.
Est-ce que ce système ne fonctionne qu'avec certains types de données
pour les clés ? Ou je me suis juste planté quelque part ?
Ensuite j'ai essayé de placer les éléments dans un tableau et de
parcourir le tableau quand on nouveau nœud est traité pour voir s'il
s'y trouve déjà. le résultat a été le même, dès le deuxième tous les
éléments présentés ont été trouvés dans le tableau. Ça c'est encore
plus bizarre, je me dis que j'ai dû me planter dans mon test mais comme
je ne sais pas bien comment fonctionnent les comparaisons je voulais
m'assurer que je ne loupe pas un truc.
Merci
Yliur
Yliur
Ici, la clé est une chaîne de caractères : 'truc'.
La question à se poser est la nature de elt.
Si c'est une variable qui contient une chaîne, cette valeur sera utilisé
comme clé et ça fonctionnera comme au-dessus.
Si c'est une variable qui contient un objet, c'est l'objet converti en
chaîne qui sera utilisé comme clé. Or tous les objets une fois convertis
en chaîne donnent la chaîne "[object Object]".
Une solution consiste à utiliser 'JSON.stringify(elt)' comme clé plutôt
que 'elt'. Une autre solution consiste à utiliser une Map.
Les clés sont *toujours* des chaînes.
Quelques liens (en anglais):
--
Paul Gaborit -
Paul Gaborit
Map a l'air intéressant mais c'est supporté dans une version très
récente du standard ecmascript, donc un peu délicat à utiliser. Je vais
sans doute faire autrement.
Merci pour les infos en tout cas :) .