超级简单的coffeescript问题
circles = []
for coordinate, i in coordinates
circles[i] = new MakeCircle(cnBlue, coordinate.x, coordinate.y, 16, 8, 0, theCanvas.ctx)
这很有效。但我知道,使用语法糖果可能甚至更多的咖啡写法来写这个。有没有办法在不使用i
的情况下写这个?
答案 0 :(得分:3)
规范的CoffeeScript方法是使用for comprehension,它将返回一个数组:
circles = for coordinate in coordinates
new MakeCircle(cnBlue, coordinate.x, coordinate.y, 16, 8, 0, theCanvas.ctx)
或者,在一行:
circles = (new MakeCircle(cnBlue, coordinate.x, coordinate.y, 16, 8, 0, theCanvas.ctx) for coordinate in coordinates)
请注意,因为我们在上面的示例中将comprehensions的值赋给变量,CoffeeScript正在将每次迭代的结果收集到一个数组中。
答案 1 :(得分:1)
circles.push(new MakeCircle(cnBlue, coordinate.x, coordinate.y, 16, 8, 0, theCanvas.ctx))
)
答案 2 :(得分:0)
更多“coffeescriptish”正在写一行:
circles = []
circles[i] = new MakeCircle(cnBlue, coor.x, coor.y, 16, 8, 0, theCanvas.ctx) for coor, i in coordinates
使用推送时可以删除i
circles = []
mc = (x,y) -> new MakeCircle cnBlue,x,y,16,8,0,theCanvas.ctx
circles.push mc(coor.x,coor.y) for coor in coordinates
答案 3 :(得分:-1)
您始终可以使用jQuery map:
circles = jQuery.map(coordinates,
(coordinate) -> new MakeCircle(cnBlue, coordinate.x, coordinate.y, 16, 8, 0, theCanvas.ctx)
)
我之前从未真正编写过CoffeeScript,如果不按原样编译,请道歉。这绝对是一种更“功能”的方式来做你想做的事情,我用现代的javascript来识别。