在coffeescript中迭代Object

我有一个对象(一个“关联数组”,也被称为一个简单的Javascript对象):

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

我需要使用coffeescript来迭代它。 现在,像这样做:

 for elem in obj 

不工作,因为obj.length是0,编译js代码使用。 在正常的Javascript我只是做

 for(var key in obj) 

但现在我想知道:我怎样才能做到这一点咖啡脚本?

for x,y of L 。 相关文件 。

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

输出

 jim is 12 john is 7 

你也可以考虑Aaron Dufour在评论中提到的for own k,v of ages的变体。 这增加了一个检查来排除从原型inheritance的属性,这可能不是在这个例子中的问题,但可能是如果你正在build立在其他东西之上。

你正在初始化一个数组,但是你使用它就像一个对象(js中没有“关联数组”)。

使用语法来遍历对象(类似):

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

使用数组理解的短手版本,可以用作单线循环。

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

数组理解是:

“理解replace(并编译成)循环,可选的guard子句和当前数组索引的值。与循环不同,数组理解是expression式,可以被返回和赋值。”, http://coffeescript.org/ #loops

按照你的约定,arr是一个数组,但是“foo”是这个数组的一个属性,它不是一个索引值。 如果你想存储你的数据的索引值的数组,你应该写:

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

或者如果你想要一个关联数组,只需使用一个对象:

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

如果你想循环arr1:

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

返回:

 values are : Bar | Foo | 

并循环arr2:“为数组中的值”

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

它返回:

 Foo : Bar Bar : Foo