comment créer une table de hachage des objets json en javascript?
Je veux créer une table de hachage des objets json, où chaque objet json représente un utilisateur.
Je veux faire en sorte de créer un "cache" d'utilisateurs.
User { ID: 234, name: 'john', ..);
Donc je peux alors faire référence à des choses comme ceci:
si(userCache[userid] != null)
alert(userCache[userid].ID);
est-ce possible?
OriginalL'auteur Blankman | 2010-05-12
Vous devez vous connecter pour publier un commentaire.
Javascript les objets eux-mêmes sont des cartes, par exemple:
(Il n'était pas clair pour moi si votre "nom d'utilisateur" serait "jean" ou 234, je suis donc allé avec "john" ci-dessus, mais vous pouvez utiliser 234 si vous préféré).
C'est à la mise en œuvre de la façon dont les clés sont stockées et si la carte est une carte de hachage ou d'une autre structure, mais je l'ai fait avec des centaines d'objets et de été parfaitement heureux avec la performance, même sur IE, qui est l'un des plus lent implémentations (pour le moment).
Cela fonctionne parce qu'il y a deux façons d'obtenir les propriétés d'un objet Javascript: Par l'intermédiaire de notation par points, et via la notation entre crochets. Par exemple:
Il peut sembler étrange que cette syntaxe à accolades pour obtenir une propriété d'un objet par le nom est le même que l'obtention d'un élément de tableau à l'indice, mais en fait, les indices de tableau sont les propriétés de l'objet en Javascript. Les noms des propriétés sont toujours des chaînes de caractères (en théorie), mais l'auto-conversion se produit lorsque vous faites des choses comme
user[234]
. (Et les implémentations sont gratuits pour optimiser la conversion, si elles le peuvent, pourvu que les règles sont maintenues.)Modifier Certains morceaux:
Une boucle dans le cache
Et si vous voulez faire une boucle par le cache (et basé sur votre question de suivi, vous le faites, alors peut-être que la lecture de cette question vous voulez aussi):
Les touches sont bouclés dans pas ordre défini, il varie en fonction du navigateur.
La suppression du cache
Supposons que vous souhaitez supprimer une propriété de la cache entièrement:
Maintenant il n'est plus un "john" propriété de l'objet.
Littéralement, comme ci-dessus, par exemple, supposons que vous avez reçu une chaîne JSON et désérialiser un objet pour l'utilisateur "john", qui vous êtes pointant sur la variable
data
. E. g.,data = JSON.parse(the_JSON_string_data);
. Vous l'ajouter à lauserCache
comme ceci:userCache[data.name] = data;
(si lename
est bien ce que vous voulez l'utiliser comme une clé, ouuserCache[data.ID] = data;
si leID
propriété est la clé).OriginalL'auteur T.J. Crowder
C'est presque mot pour mot votre code, mais il fonctionne, oui:
Ou a ta question sur la façon de mettre en œuvre ce côté serveur pour obtenir le cache de l'utilisateur de la client?
OriginalL'auteur Peter Jaric
OriginalL'auteur Darin Dimitrov
Depuis tous les objets en Javascript sont vraiment dictionnaires, vous pouvez le faire dans un couple des manières.
Une des solutions pourrait être:
OriginalL'auteur Bobby