J'ai besoin de stocker des statistiques en utilisant JavaScript d'une manière comme je le ferais en C #:
Dictionary<string, int> statistics;
statistics["Foo"] = 10;
statistics["Goo"] = statistics["Goo"] + 1;
statistics.Add("Zoo", 1);
Existe-t-il un Hashtable
ou quelque chose comme Dictionary<TKey, TValue>
en JavaScript?
Comment pourrais-je stocker des valeurs de cette manière?
javascript
dictionary
hashtable
George2
la source
la source
Réponses:
Utilisez des objets JavaScript comme tableaux associatifs .
Créez un objet avec
Une syntaxe alternative pour le même est:
Si vous pouvez également créer une clé pour évaluer les cartes d'objets avec la syntaxe suivante
la source
new Array()
est désapprouvée. L'article mentionne finalement ses inconvénients et suggèrenew Object()
ou{}
comme alternatives préférées, mais c'est presque la fin et je crains que la plupart des lecteurs n'iront pas aussi loin.var obj1 = {}; var obj2 = {}; var table= {}; table[obj1] = "A"; table[obj2] = "B"; alert(table[obj1]); //displays B
car il ne peut pas différencier les clés obj1 et obj2; ils sont tous les deux convertis en chaîne et deviennent juste quelque chose comme "Object". Total échoue et rend la sérialisation sécurisée avec les références et les références cycliques intactes difficiles ou non performantes en JavaScript. C'est facile dans Flash / AS3.Point.prototype.equals = function(obj) { return (obj instanceof Point) && (obj.x === this.x) && (obj.y === this.y); };
for... in
car un dictionnaire fera une boucle sur ses clés, ilObject.keys
semble donc mal placé.Object.keys
renvoie un tableau des clés du dictionnaire, etfor... in
pour un tableau boucle sur ses "clés", qui pour un tableau sont ses indices, pas ses valeurs.Si vous venez d'un langage orienté objet, vous devriez consulter cet article .
la source
Tous les navigateurs modernes prennent en charge un objet Carte javascript . Il y a plusieurs raisons qui rendent l'utilisation d'une carte meilleure que l'objet:
Exemple:
Si vous souhaitez que les clés qui ne sont pas référencées à partir d'autres objets soient récupérées, pensez à utiliser un WeakMap au lieu d'une carte.
la source
Map
est à peine utile lorsque votre clé est un objet mais doit être comparé par valeur et non par référence.Sauf si vous avez une raison spécifique de ne pas le faire, utilisez simplement un objet normal. Les propriétés des objets en Javascript peuvent être référencées à l'aide d'une syntaxe de style table de hachage:
Les éléments
foo
etbar
peuvent maintenant être référencés comme:Bien sûr, cela signifie que vos clés doivent être des chaînes. S'ils ne sont pas des chaînes, ils sont convertis en interne en chaînes, donc cela peut toujours fonctionner, YMMV.
la source
var hash = {}; hash[1] = "foo"; alert(hash["1"]);
alertes "foo".var dict = {}; dict.key1 = "val1"; dict["key2"] = "val2";
l'élément key1 de dict peut être référencé de manière équivalente par les deuxdict["key1"]
etdict.key1
.Puisque chaque objet dans JS se comporte comme - et est généralement implémenté comme - une table de hachage, je vais juste avec ça ...
la source
if (hashSweetHashTable.foo)
doit entrer le bloc if sifoo
est défini.donc en C # le code ressemble à:
ou
en JavaScript
L'objet dictionnaire C # contient des méthodes utiles comme
dictionary.ContainsKey()
en JavaScript, nous pourrions utiliser lehasOwnProperty
mêmela source
hasOwnProperty
Si vous souhaitez que vos clés soient n'importe quel objet plutôt que de simples chaînes, vous pouvez utiliser mon jshashtable .
la source
la source
{}
pas un tableau:[]
ounew Array()
si vous avez l'intention d'avoir des clés de chaîne sinon le moteur js a un problème - il verra soit 2 types pour 1 variable ce qui signifie aucune optimisation ou il fonctionnera avec un tableau et réalisera il doit changer d'objet (réallocation possible).J'ai créé cela pour résoudre certains problèmes, tels que le mappage de clé d'objet, la capacité d'énumération (avec la
forEach()
méthode) et l'effacement.Documentation de la classe
Hashtable
Méthodes:
get(key)
Renvoie la valeur associée à la clé spécifiée.
Paramètres::
key
clé à partir de laquelle récupérer la valeur.put(key, value)
Associe la valeur spécifiée à la clé spécifiée.
Paramètres::
key
clé à laquelle associer la valeur.value
: Valeur à associer à la clé.remove(key)
Supprime la clé spécifiée avec sa valeur.
Paramètres::
key
la clé à supprimer.clear()
Efface toute la table de hachage, supprimant à la fois les clés et les valeurs.
indexOfKey(key)
Renvoie l'index de la clé spécifiée, en fonction de l'ordre d'ajout.
Paramètres:: dont
key
la clé obtient l'index.indexOfValue(value)
Renvoie l'index de la valeur spécifiée, en fonction de l'ordre d'ajout.
Paramètres:: dont
value
la valeur obtient l'index.Notes:
Ces informations sont récupérées par la
indexOf()
méthode d'un tableau, donc il compare l'objet juste avec latoString()
méthode.entryAt(index)
Renvoie un objet avec deux propriétés: clé et valeur, représentant l'entrée à l'index spécifié.
Paramètres::
index
L'index de l'entrée à obtenir.containsKey(key)
Renvoie si la table de hachage contient la clé spécifiée.
Paramètres::
key
La clé à vérifier.containsValue(value)
Renvoie si la table de hachage contient la valeur spécifiée.
Paramètres::
value
La valeur à vérifier.forEach(iterator)
Itère toutes les entrées dans le spécifié
iterator
.Paramètres:
value
: Procédé de 3 paramètres:key
,value
etindex
oùindex
représente l'indice de l'entrée.Propriétés:
length
( Lecture seule )Obtient le nombre d'entrées dans la table de hachage.
keys
( Lecture seule )Obtient un tableau de toutes les clés de la table de hachage.
values
( Lecture seule )Obtient un tableau de toutes les valeurs de la table de hachage.
entries
( Lecture seule )Obtient un tableau de toutes les entrées de la table de hachage. Ils sont représentés sous la même forme que la méthode
entryAt()
.la source
https://gist.github.com/alexhawkins/f6329420f40e5cafa0a4
la source
Vous pouvez en créer un en utilisant comme suit:
la source