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

2020/10/19 08:21 · javascript ·  · 0评论

我有一个对象(可以说是“关联数组”,也称为纯JavaScript对象):

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

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

# 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

您可能还需要考虑for own k,v of agesAaron Dufour在评论中提到的变体这将添加检查以排除从原型继承的属性,在此示例中这可能不是问题,但如果您是在其他内容之上构建的话,则可能会出现问题。

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

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

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

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

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

数组理解为:

““理解用替换循环替换(并编译成)for循环,带有可选的保护子句和当前数组索引的值。与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 key, val of arr
  console.log key + ': ' + val

返回:

Foo : Bar
Bar : Foo
本文地址:http://javascript.askforanswer.com/ruhezaicoffeescriptzhongdeduixiangshangdiedaijianhezhi.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!