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