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 objusando 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

lengthpropiedad 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 agesmencionada 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
ofcompila a JavaScriptin. Es un punto común de confusión, pero tenerinque usarlo con matrices es increíblemente útil. Hablo extensamente sobre esto en el libro CoffeeScript .arrcomoarr = [], 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 objestá 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