咖啡循环效率

时间:2012-05-04 05:26:51

标签: coffeescript

超级简单的coffeescript问题

circles = []
for coordinate, i in coordinates
    circles[i] = new MakeCircle(cnBlue, coordinate.x, coordinate.y, 16, 8, 0, theCanvas.ctx) 

这很有效。但我知道,使用语法糖果可能甚至更多的咖啡写法来写这个。有没有办法在不使用i的情况下写这个?

4 个答案:

答案 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)

请参阅Loops and Comprehensions

  

请注意,因为我们在上面的示例中将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来识别。