CoffeeScript二维数组用法

CoffeeScript二维数组用法,coffeescript,Coffeescript,我觉得我缺少了一些关于咖啡脚本和二维数组的东西。我只是尝试创建一个由空格组成的网格(想想checkers)。在使用arrays.map函数进行了一些搜索和发现之后,我得出了以下结论: @spaces = [0...20].map (x)-> [0...20].map (y) -> new Elements.Space() 这看起来效果很好,我有一个很好的二维数组,每个数组中都创建了我的空间对象。但是现在我想把创建的空间构造函数发送到x,y位置。因为我有两层,所以当我为y

我觉得我缺少了一些关于咖啡脚本和二维数组的东西。我只是尝试创建一个由空格组成的网格(想想checkers)。在使用arrays.map函数进行了一些搜索和发现之后,我得出了以下结论:

@spaces = [0...20].map (x)->
  [0...20].map (y) ->
    new Elements.Space()
这看起来效果很好,我有一个很好的二维数组,每个数组中都创建了我的空间对象。但是现在我想把创建的空间构造函数发送到x,y位置。因为我有两层,所以当我为
y
输入map函数时,我丢失了
x
变量

理想情况下,我想做以下事情:

@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。

您第一次尝试使用
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
版本更清晰)。

for循环版本也不必创建数组来调用
map
,而[0…20]中的
for x直接转换为JavaScript for-loops。谢谢!我把我的问题翻译成了更简单的问题,最终解决了它。从我在Chrome调试器中看到的情况来看,x是未定义的。但它是有效的!