J'ai un objet (un "tableau associé" pour ainsi dire - également appelé objet JavaScript brut):
obj = {}
obj["Foo"] = "Bar"
obj["bar"] = "Foo"
Je veux répéter l' obj
utilisation de CoffeeScript comme suit:
# CS
for elem in obj
bu le code CS ci-dessus se compile en JS:
// JS
for (i = 0, len = obj.length; i < len; i++)
ce qui n'est pas approprié dans ce cas.
La manière JavaScript serait for(var key in obj)
mais maintenant je me demande: comment puis-je faire cela dans CoffeeScript?
javascript
coffeescript
jhchen
la source
la source
length
propriété qui fait simplement référence à l'index numérique le plus élevé (plus 1). Ce que vous voulez est juste un « objet »:obj = {}
. Les tableaux sont des objets, mais il n'y a aucune raison d'en utiliser un dans votre exemple.Réponses:
Utilisation
for x,y of L
. Documentation pertinente .Les sorties
Vous pouvez également envisager la variante
for own k,v of ages
mentionnée par Aaron Dufour dans les commentaires. Cela ajoute une vérification pour exclure les propriétés héritées du prototype, ce qui n'est probablement pas un problème dans cet exemple, mais peut-être si vous construisez sur d'autres éléments.la source
of
compile en JavaScriptin
. C'est un point commun de confusion, mais l'in
utiliser avec des tableaux est incroyablement utile. J'en parle longuement dans le livre CoffeeScript .arr
commearr = []
, vous devez utiliserarr = {}
. En Javascript (et Coffeescript), les tableaux ont des indices numériques. Les objets se comportent comme des tableaux / dictionnaires associatifs.for own key, value of obj
plus proche de ce que recherche OP.Vous initialisez un tableau, mais ensuite vous l'utilisez comme un objet (il n'y a pas de "tableau associatif" dans js).
Utilisez la syntaxe pour itérer sur des objets (quelque chose comme):
la source
[]
place de{}
dans ce cas.La version courte utilisant la compréhension de tableau, qui peut être utilisée comme une boucle sur une ligne.
La compréhension des tableaux sont:
la source
avec votre convention, arr est un tableau, mais "foo" est une propriété de ce tableau, ce n'est pas une valeur indexée. Si vous souhaitez stocker vos données les valeurs indexées d'un tableau, vous devez avoir écrit:
ou si vous voulez un tableau associatif, utilisez simplement un objet:
si vous voulez boucler sur arr1:
Retour :
et pour boucler sur arr2: "for value in array"
qui renvoie:
la source