web-dev-qa-db-fra.com

Comment parcourir les clés et les valeurs d'un objet dans CoffeeScript?

J'ai un objet (un "tableau associé" pour ainsi dire - également appelé objet JavaScript simple):

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

Je veux parcourir obj en utilisant CoffeeScript comme suit:

# CS
for elem in obj

le code CS ci-dessus est compilé en JS:

// JS
for (i = 0, len = obj.length; i < len; i++)

ce qui n'est pas approprié dans ce cas.


La méthode JavaScript serait for(var key in obj) mais maintenant je me pose la question suivante: comment puis-je faire cela dans CoffeeScript?

187
jhchen

Utilisez for x,y of L. documentation pertinente .

ages = {}
ages["jim"] = 12
ages["john"] = 7

for k,v of ages
  console.log k + " is " + v

Les sorties

jim is 12
john is 7

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 par-dessus d'autres éléments.

347
Nick

Vous initialisez un tableau, mais vous l'utilisez ensuite comme un objet (il n'y a pas de "tableau associatif" en js).

Utilisez la syntaxe pour itérer sur des objets (quelque chose comme):

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

La version abrégée utilisant la compréhension de tableau, qui peut être utilisée comme une boucle d’une ligne.

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

La compréhension du tableau est:

"Les compréhensions remplacent (et compilent) des boucles for, avec des clauses de garde facultatives et la valeur de l'index de tableau actuel. Contrairement aux boucles for, les interprétations de tableau sont des expressions et peuvent être retournées et attribuées.", http: // coffeescript.org/#loops

2
sqren

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:

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

ou si vous voulez un tableau associatif, utilisez simplement un objet:

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

si vous voulez faire une boucle sur arr1:

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

résultats :

values are : Bar | Foo |

et en boucle sur arr2: "pour la valeur dans un tableau"

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

qui retourne:

Foo : Bar
Bar : Foo
1
Benibur