Mam obiekt (że tak powiem „tablicę asocjacyjną” - znany również jako zwykły obiekt JavaScript):
obj = {}
obj["Foo"] = "Bar"
obj["bar"] = "Foo"
Chcę powtórzyć za obj
pomocą CoffeeScript w następujący sposób:
# CS
for elem in obj
bu powyższy kod CS kompiluje się do JS:
// JS
for (i = 0, len = obj.length; i < len; i++)
co nie jest odpowiednie w tym przypadku.
Sposób na JavaScript byłby taki, for(var key in obj)
ale teraz zastanawiam się: jak mogę to zrobić w CoffeeScript?
javascript
coffeescript
jhchen
źródło
źródło
length
właściwością, która po prostu odnosi się do najwyższego indeksu liczbowego (plus 1). Co chcesz to tylko „obiekt”:obj = {}
. Tablice są obiektami, ale nie ma powodu, aby używać ich w swoim przykładzie.Odpowiedzi:
Zastosowanie
for x,y of L
. Odpowiednia dokumentacja .Wyjścia
Możesz również rozważyć wariant,
for own k,v of ages
o którym wspomniał Aaron Dufour w komentarzach. Dodaje to zaznaczenie, aby wykluczyć właściwości odziedziczone z prototypu, co prawdopodobnie nie jest problemem w tym przykładzie, ale może być, jeśli budujesz na innych rzeczach.źródło
of
kompiluje do JavaScriptin
. Jest to powszechny punkt zamieszania, alein
korzystanie z tablic jest niezwykle przydatne. Długo o tym mówię w książce CoffeeScript .arr
ponieważarr = []
należy użyćarr = {}
. W JavaScript (i Coffeescript) tablice mają indeksy numeryczne. Obiekty zachowują się jak tablice / dykty asocjacyjne.for own key, value of obj
jest bliżej tego, czego szuka OP.Inicjujesz tablicę, ale potem używasz jej jak obiektu (w js nie ma „tablicy asocjacyjnej”).
Użyj iteracji do iteracji po obiektach (coś takiego):
źródło
[]
zamiast{}
tego.Wersja krótka z wykorzystaniem funkcji tablicowej, która może być używana jako pętla jednowierszowa.
Rozumienie tablic to:
źródło
zgodnie z konwencją arr jest tablicą, ale „foo” jest własnością tej tablicy, nie jest wartością indeksowaną. Jeśli chcesz przechowywać swoje dane w indeksowanych wartościach tablicy, powinieneś napisać:
lub jeśli chcesz tablicy asocjacyjnej, po prostu użyj obiektu:
jeśli chcesz zapętlić arr1:
zwroty :
i do zapętlenia arr2: „dla wartości w tablicy”
który zwraca:
źródło