Bri*_*unt 14 javascript coffeescript ecmascript-6
如何在Coffeescript中迭代ES6 Map或Set?
在Javascript中,人们可以使用例如
s = new Set()
s.add({a: 1})
for (x of s) {
console.log(x);
}
Run Code Online (Sandbox Code Playgroud)
但是Coffeescript有自己的of运算符转换为in,即:
console.log(x) for x of s
Run Code Online (Sandbox Code Playgroud)
成为... for (x in s) { ... }.
如何of在Coffeescript中访问Javascript的运算符?
人们可以通过骑自行车来编写自己的自定义迭代器s.values().next(),但那可能是令人厌恶的.:)
目前无法使用ofcoffeescript 的新Javascript ES6 运算符(截至1.9.2).现在最好的选择是使用s.forEach (x) -> ...或m.forEach (value, key) ->如上所述.
对于一组:
s = new Set
s.add {a: 1}
s.forEach (v) =>
console.log v
Run Code Online (Sandbox Code Playgroud)
对于地图:
m = new Map
m.set {a: 1}, {b: 2}
m.forEach (v, k) =>
console.log k, v
Run Code Online (Sandbox Code Playgroud)
如果您想避免出于任何原因创建新函数,可以直接从coffeescript使用迭代器.但它有点讨厌.套装:
i = s.values()
while(v = i.next(); !v.done)
console.log v.value
Run Code Online (Sandbox Code Playgroud)
对于地图:
i = m.entries()
while(v = i.next(); !v.done)
[key, value] = v.value
console.log key, value
Run Code Online (Sandbox Code Playgroud)
while循环上的括号是使while循环依赖于v.done所必需的.
它们也可以在一行上完成 - 但它看起来很糟糕:
i = s.values(); console.log v.value while(v = i.next(); !v.done)
Run Code Online (Sandbox Code Playgroud)
for …fromJavaScript 的 for...of 现在可以作为 CoffeeScript 的
for …from(我们已经有了for …of):for n from generatorFunction()
一种选择是使用反引号嵌入原始 Javascript,即http://coffeescript.org/#embedded。
`for (x of y) { }`
Run Code Online (Sandbox Code Playgroud)