3

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

@spaces = [0...20].map (x)->
  [0...20].map (y) ->
    new Elements.Space()

这似乎很好用,我有一个很好的二维数组,每个数组都创建了我的 Space 对象。但现在我想将创建的空间构造函数发送到 x,y 位置。因为我有两层深,所以x当我输入 map 函数时,我丢失了变量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 中做到这一点。

4

1 回答 1

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版本更清晰)。

于 2012-09-27T03:36:35.247 回答