convertir coffee javascript coffeescript

javascript - coffee - js to coff



Iterar sobre Object en coffeescript (4)

Tengo un objeto (una "matriz asociada", también conocida como un objeto Javascript simple):

obj = {} obj["Foo"] = "Bar" obj["bar"] = "Foo"

y necesito iterar sobre esto usando coffeescript. Ahora, haciendo esto:

for elem in obj

no funciona porque obj.length es 0, que usa el código de compilación js. En Javascript normal, simplemente lo haría

for(var key in obj)

pero ahora me pregunto: ¿cómo puedo hacer esto en coffeescript?


Estás inicializando una matriz, pero luego la estás usando como un objeto (no hay una "matriz asociativa" en js).

Use la sintaxis para iterar sobre objetos (algo así como):

for key, val of arr console.log key + '': '' + val


La versión de mano corta que utiliza la comprensión de matriz, que se puede utilizar como un ciclo de una sola línea.

console.log index + ": " + elm for index, elm of array

La comprensión de matriz es:

"Las comprensiones reemplazan (y compilan) en bucles, con cláusulas de protección opcionales y el valor del índice de matriz actual. A diferencia de los bucles, las comprensiones de matriz son expresiones, y pueden devolverse y asignarse.", Http://coffeescript.org/ #loops


Use for x,y of L Documentación relevante

ages = {} ages["jim"] = 12 ages["john"] = 7 for k,v of ages console.log k + " is " + v

Salidas

jim is 12 john is 7

También es posible que desee considerar la variante for own k,v of ages mencionadas por Aaron Dufour en los comentarios. Esto agrega un control para excluir las propiedades heredadas del prototipo, que probablemente no sea un problema en este ejemplo, pero puede ser si usted está construyendo sobre otras cosas.


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 los valores indexados de una matriz, debería haber escrito:

arr1 = [] arr1[0] = "Bar" arr1[1] = "Foo"

o si quiere una matriz asociativa, simplemente use un objeto:

arr2 = {} arr2["Foo"] = "Bar" // equivalent to arr2.foo="Bar" arr2["bar"] = "Foo" // equivalent to arr2.bar="Foo"

si quieres pasar por encima de arr1:

str = "values are : " for val in arr2 str += val + " |" console.log key + '': '' + val

devoluciones :

values are : Bar | Foo |

y para pasar sobre arr2: "para valor en matriz"

for key, val of arr console.log key + '': '' + val

que devuelve:

Foo : Bar Bar : Foo