Ich muss einige Statistiken mit JavaScript so speichern, wie ich es in C # tun würde:
Dictionary<string, int> statistics;
statistics["Foo"] = 10;
statistics["Goo"] = statistics["Goo"] + 1;
statistics.Add("Zoo", 1);
Gibt es ein Hashtable
oder so etwas Dictionary<TKey, TValue>
in JavaScript?
Wie kann ich Werte so speichern?
javascript
dictionary
hashtable
George2
quelle
quelle
Antworten:
Verwenden Sie JavaScript-Objekte als assoziative Arrays .
Erstellen Sie ein Objekt mit
Eine alternative Syntax für dasselbe ist:
Wenn Sie auch Schlüssel zur Bewertung von Objektzuordnungen mit der folgenden Syntax erstellen können
quelle
new Array()
verpönt ist. Der Artikel erwähnt schließlich seine Nachteile und schlägt vornew Object()
oder{}
als bevorzugte Alternativen, aber das ist kurz vor dem Ende und ich fürchte, die meisten Leser werden nicht so weit kommen.var obj1 = {}; var obj2 = {}; var table= {}; table[obj1] = "A"; table[obj2] = "B"; alert(table[obj1]); //displays B
weil es nicht zwischen den Schlüsseln obj1 und obj2 unterscheiden kann; Sie werden beide in Zeichenfolgen konvertiert und werden so etwas wie "Objekt". Total fehlgeschlagen und macht die typsichere Serialisierung mit intakten Referenzen und zyklischen Referenzen in JavaScript schwierig oder nicht performant. In Flash / AS3 ist das ganz einfach.Point.prototype.equals = function(obj) { return (obj instanceof Point) && (obj.x === this.x) && (obj.y === this.y); };
for... in
denn ein WörterbuchObject.keys
durchläuft seine Schlüssel und scheint dort fehl am Platz zu sein.Object.keys
Gibt ein Array der Schlüssel des Wörterbuchs zurück, undfor... in
für ein Array werden die "Schlüssel" durchlaufen, die für ein Array seine Indizes und nicht seine Werte sind.Wenn Sie aus einer objektorientierten Sprache kommen, sollten Sie diesen Artikel lesen .
quelle
Alle modernen Browser unterstützen ein Javascript- Map- Objekt. Es gibt mehrere Gründe, die die Verwendung einer Karte besser machen als ein Objekt:
Beispiel:
Wenn Sie möchten, dass Schlüssel, auf die nicht von anderen Objekten verwiesen wird, als Müll gesammelt werden, sollten Sie eine WeakMap anstelle einer Map verwenden.
quelle
Map
ist kaum nützlich, wenn Ihr Schlüssel ein Objekt ist, aber nach Wert und nicht nach Referenz verglichen werden sollte.Verwenden Sie einfach ein normales Objekt, es sei denn, Sie haben einen bestimmten Grund, dies nicht zu tun. Auf Objekteigenschaften in Javascript kann mithilfe der Syntax im Hashtable-Stil verwiesen werden:
Beide
foo
undbar
Elemente können nun wie folgt referenziert werden:Dies bedeutet natürlich, dass Ihre Schlüssel Zeichenfolgen sein müssen. Wenn es sich nicht um Zeichenfolgen handelt, werden sie intern in Zeichenfolgen konvertiert, sodass dies möglicherweise weiterhin funktioniert, YMMV.
quelle
var hash = {}; hash[1] = "foo"; alert(hash["1"]);
Warnungen "foo".var dict = {}; dict.key1 = "val1"; dict["key2"] = "val2";
Schlüssel1 Element dict kann äquivalent durch beiden referenziert werdendict["key1"]
unddict.key1
.Da sich jedes Objekt in JS wie eine Hashtabelle verhält und im Allgemeinen als Hashtabelle implementiert wird, gehe ich einfach so vor ...
quelle
if (hashSweetHashTable.foo)
sollte den if-Block eingeben, wennfoo
gesetzt ist.In C # sieht der Code also so aus:
oder
in JavaScript
C # Dictionary - Objekt enthält nützliche Methoden wie
dictionary.ContainsKey()
in JavaScript wir das nutzen könntenhasOwnProperty
wiequelle
hasOwnProperty
Wenn Sie möchten, dass Ihre Schlüssel ein beliebiges Objekt sind und nicht nur Zeichenfolgen, können Sie meine jshashtable verwenden .
quelle
quelle
{}
kein Array:[]
odernew Array()
wenn Sie Zeichenfolgenschlüssel haben möchten, sonst hat die js-Engine ein Problem - entweder werden 2 Typen für 1 Variable angezeigt, was keine Optimierung bedeutet, oder es wird mit Array ausgeführt und realisiert es muss zum Objekt wechseln (mögliche Neuzuweisung).Ich habe dies erstellt, um ein Problem zu lösen, wie z. B. Objektschlüsselzuordnung, Aufzählungsfähigkeit (mit
forEach()
Methode) und Löschen.Dokumentation der Klasse
Hashtable
Methoden:
get(key)
Gibt den Wert zurück, der dem angegebenen Schlüssel zugeordnet ist.
Parameter ::
key
Der Schlüssel, von dem der Wert abgerufen wird.put(key, value)
Ordnet den angegebenen Wert dem angegebenen Schlüssel zu.
Parameter ::
key
Der Schlüssel, dem der Wert zugeordnet ist.value
: Der Wert, der dem Schlüssel zugeordnet werden soll.remove(key)
Entfernt den angegebenen Schlüssel mit seinem Wert.
Parameter ::
key
Der zu entfernende Schlüssel.clear()
Löscht alle Hashtabellen und entfernt sowohl die Schlüssel als auch die Werte.
indexOfKey(key)
Gibt den Index des angegebenen Schlüssels basierend auf der Additionsreihenfolge zurück.
Parameter ::
key
Der Schlüssel, der den Index erhält.indexOfValue(value)
Gibt den Index des angegebenen Werts basierend auf der Additionsreihenfolge zurück.
Parameter ::
value
Der Wert, dessen Index abgerufen wird.Hinweise:
Diese Informationen werden von der
indexOf()
Methode eines Arrays abgerufen , sodass das Objekt nur mit dertoString()
Methode verglichen wird.entryAt(index)
Gibt ein Objekt mit zwei Eigenschaften zurück: Schlüssel und Wert, die den Eintrag am angegebenen Index darstellen.
Parameter ::
index
Der Index des abzurufenden Eintrags.containsKey(key)
Gibt zurück, ob die Hashtabelle den angegebenen Schlüssel enthält.
Parameter ::
key
Der zu überprüfende Schlüssel.containsValue(value)
Gibt zurück, ob die Hashtabelle den angegebenen Wert enthält.
Parameter ::
value
Der zu überprüfende Wert.forEach(iterator)
Iteriert alle Einträge in der angegebenen
iterator
.Parameter ::
value
Eine Methode mit 3 Parametern :key
,value
undindex
, wobeiindex
der Index des Eintrags dargestellt wird.Eigenschaften:
length
( Schreibgeschützt )Ruft die Anzahl der Einträge in der Hashtabelle ab.
keys
( Schreibgeschützt )Ruft ein Array aller Schlüssel in der Hashtabelle ab.
values
( Schreibgeschützt )Ruft ein Array aller Werte in der Hashtabelle ab.
entries
( Schreibgeschützt )Ruft ein Array aller Einträge in der Hashtabelle ab. Sie werden in der gleichen Form der Methode dargestellt
entryAt()
.quelle
https://gist.github.com/alexhawkins/f6329420f40e5cafa0a4
quelle
Sie können eine erstellen, indem Sie Folgendes verwenden:
quelle