CoffeeScript 2维数组使用

Chr*_*ris 3 coffeescript

我觉得我错过了CoffeeScript和二维数组的东西.我只是试图制作一个空间网格(想想跳棋).在使用arrays.map函数进行一些搜索和发现之后,我想出了这个:

@spaces = [0...20].map (x)->
  [0...20].map (y) ->
    new Elements.Space()
Run Code Online (Sandbox Code Playgroud)

这似乎工作得很好,我有一个很好的二维数组,每个都创建了我的Space对象.但是现在我想将创建的空间构造函数发送到x,y位置.因为我是两层深,所以x当我输入map函数时,我丢失了变量y.

理想情况下,我想做的事情如下:

@spaces = [0...20].map (x)->
  [0...20].map (y) ->
    new Elements.Space(x, y)
Run Code Online (Sandbox Code Playgroud)

或者对我来说更自然的东西:

for row in rows
  for column in row
    @spaces[row][column] = new Elements.Space(row, column)
Run Code Online (Sandbox Code Playgroud)

我真的乐于接受任何更好的方式.我知道如何在标准JavaScript中实现它,但我真的想学习如何在CoffeeScript中完成它.

Aar*_*our 7

您的第一次尝试map是一种有效的方法.你实际上并没有输x,因为关闭.所以你的第二个代码块没有错:

@spaces = [0...20].map (x)->
  [0...20].map (y) ->
    new Elements.Space(x, y)
Run Code Online (Sandbox Code Playgroud)

for循环版本也非常简单:

@spaces = for x in [0...20]
  for y in [0...20]
    new Elements.Space(x, y)
Run Code Online (Sandbox Code Playgroud)

记住,一切都是表达.所以这可行(并且可能比map版本更清晰).