繁体   English   中英

如何在CoffeeScript中迭代对象中的键和值?

[英]How to iterate over the keys and values in an object in CoffeeScript?

我有一个对象(一个“关联数组”,也就是说 - 也称为普通的JavaScript对象):

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

我想使用CoffeeScript迭代obj ,如下所示:

# CS
for elem in obj

上面的CS代码编译成JS:

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

这种情况不合适。


JavaScript的方式是for(var key in obj)但现在我想知道: 我怎么能在CoffeeScript中做到这一点?

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的变体。 这会添加一个检查以排除从原型继承的属性,这可能不是本例中的问题,但可能是在构建其他东西之上。

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

使用语法迭代对象(类似):

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

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

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

数组理解是:

“comprehensions替换(并编译成)for循环,带有可选的guard子句和当前数组索引的值。与for循环不同,数组理解是表达式,可以返回和分配。”, 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 data in array”

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

返回:

Foo : Bar
Bar : Foo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM