我觉得我错过了CoffeeScript和2维数组的东西。我只是试图制作一个空间网格(想想跳棋)。在使用arrays.map函数进行一些搜索和发现之后,我想出了这个:
@spaces = [0...20].map (x)->
[0...20].map (y) ->
new Elements.Space()
这看起来效果很好,我有一个漂亮的二维数组,每个都创建了我的Space对象。但是现在我想将创建的空间构造函数发送到x,y位置。因为我有两层深,所以当我输入x
的地图函数时,我丢失了y
变量。
理想情况下,我想做的事情如下:
@spaces = [0...20].map (x)->
[0...20].map (y) ->
new Elements.Space(x, y)
或者对我来说更自然的事情:
for row in rows
for column in row
@spaces[row][column] = new Elements.Space(row, column)
我真的乐于接受任何更好的方式。我知道如何在标准JavaScript中实现它,但我真的想学习如何在CoffeeScript中完成它。
答案 0 :(得分:7)
使用map
进行首次尝试是一种有效的方法。实际上你不会丢失x
,因为闭包。所以你的第二个代码块没有任何问题:
@spaces = [0...20].map (x)->
[0...20].map (y) ->
new Elements.Space(x, y)
for循环版本也非常简单:
@spaces = for x in [0...20]
for y in [0...20]
new Elements.Space(x, y)
记住,一切都是表达。所以这可行(并且可能比map
版本更清晰。)