Tengo un objeto (una "matriz asociada", por así decirlo, también conocido como un objeto JavaScript simple):
obj = {}
obj["Foo"] = "Bar"
obj["bar"] = "Foo"
Quiero repetir obj
usando CoffeeScript de la siguiente manera:
# CS
for elem in obj
pero el código CS anterior compila a JS:
// JS
for (i = 0, len = obj.length; i < len; i++)
lo cual no es apropiado en este caso.
La forma de JavaScript sería for(var key in obj)
pero ahora me pregunto: ¿cómo puedo hacer esto en CoffeeScript?
javascript
coffeescript
jhchen
fuente
fuente
length
propiedad que simplemente se refiere al índice numérico más alto (más 1). Lo que queremos es simplemente un "objeto":obj = {}
. Las matrices son objetos, pero no hay razón para usar una en su ejemplo.Respuestas:
Uso
for x,y of L
. Documentación relevante .Salidas
También puede considerar la variante
for own k,v of ages
mencionada por Aaron Dufour en los comentarios. Esto agrega una verificación para excluir las propiedades heredadas del prototipo, lo que probablemente no sea un problema en este ejemplo, pero puede serlo si está construyendo sobre otras cosas.fuente
of
compila a JavaScriptin
. Es un punto común de confusión, pero tenerin
que usarlo con matrices es increíblemente útil. Hablo extensamente sobre esto en el libro CoffeeScript .arr
comoarr = []
, debe usararr = {}
. En Javascript (y Coffeescript) las matrices tienen índices numéricos. Los objetos se comportan como matrices / dictos asociativos.for own key, value of obj
está más cerca de lo que está buscando OP.Estás inicializando una matriz, pero luego la estás utilizando como un objeto (no hay "matriz asociativa" en js).
Use la sintaxis para iterar sobre objetos (algo así como):
fuente
[]
lugar de hacerlo{}
en ese caso.La versión de mano corta que usa la comprensión de matriz, que puede usarse como un bucle de una línea.
La comprensión de la matriz es:
fuente
con su convención, arr es una matriz, pero "foo" es una propiedad de esta matriz, no es un valor indexado. Si desea almacenar sus datos de los valores indexados de una matriz, debería haber escrito:
o si quieres una matriz asociativa, solo usa un objeto:
si quieres recorrer arr1:
devoluciones :
y para recorrer arr2: "para el valor en la matriz"
que devuelve:
fuente