Ich habe ein Objekt (sozusagen ein "assoziiertes Array" - auch als einfaches JavaScript-Objekt bekannt):
obj = {}
obj["Foo"] = "Bar"
obj["bar"] = "Foo"
Ich möchte die obj
Verwendung von CoffeeScript wie folgt wiederholen:
# CS
for elem in obj
bu der obige CS-Code kompiliert zu JS:
// JS
for (i = 0, len = obj.length; i < len; i++)
was in diesem Fall nicht angemessen ist.
Der JavaScript-Weg wäre, for(var key in obj)
aber jetzt frage ich mich: Wie kann ich das in CoffeeScript machen?
javascript
coffeescript
jhchen
quelle
quelle
length
Eigenschaft, die sich einfach auf den höchsten numerischen Index (plus 1) bezieht. Was Sie wollen, ist nur ein "Objekt" :obj = {}
. Arrays sind Objekte, aber in Ihrem Beispiel gibt es keinen Grund, eines zu verwenden.Antworten:
Verwenden Sie
for x,y of L
. Relevante Dokumentation .Ausgänge
Vielleicht möchten Sie auch die
for own k,v of ages
von Aaron Dufour in den Kommentaren erwähnte Variante in Betracht ziehen . Dadurch wird eine Überprüfung hinzugefügt, um vom Prototyp geerbte Eigenschaften auszuschließen. Dies ist in diesem Beispiel wahrscheinlich kein Problem, kann jedoch auftreten, wenn Sie auf anderen Elementen aufbauen.quelle
of
zu JavaScript kompiliertin
. Es ist ein häufiger Punkt der Verwirrung, aber diein
Verwendung mit Arrays ist unglaublich nützlich. Ich spreche ausführlich darüber im CoffeeScript-Buch .arr
alsarr = []
, Sie sollten verwendenarr = {}
. In Javascript (und Coffeescript) haben Arrays numerische Indizes. Objekte verhalten sich wie assoziative Arrays / Dicts.for own key, value of obj
näher an dem zu sein, wonach OP sucht.Sie initialisieren ein Array, verwenden es dann aber wie ein Objekt (in js gibt es kein "assoziatives Array").
Verwenden Sie die Syntax zum Iterieren über Objekte (so etwas wie):
quelle
[]
statt{}
in diesem Fall.Die Kurzhandversion mit Array-Verständnis, die als einzeilige Schleife verwendet werden kann.
Array-Verständnis sind:
quelle
Mit Ihrer Konvention ist arr ein Array, aber "foo" ist eine Eigenschaft dieses Arrays, es ist kein indizierter Wert. Wenn Sie Ihre Daten in den indizierten Werten eines Arrays speichern möchten, sollten Sie Folgendes geschrieben haben:
oder wenn Sie ein assoziatives Array möchten, verwenden Sie einfach ein Objekt:
Wenn Sie arr1 durchlaufen möchten:
kehrt zurück :
und um arr2 zu durchlaufen: "für Wert im Array"
was zurückgibt:
quelle