2012-09-27 80 views
3

我覺得我缺少一些CoffeeScript和2維數組。我只是試圖製作一個空格網格(認爲跳棋)。某些搜索和與arrays.map功能的發現之後,我想出了這個:CoffeeScript 2維數組使用

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

而且這似乎工作的偉大,我在每個創建我的空間對象一個不錯的二維數組。但是現在我想發送創建的空間構造函數的x,y位置。因爲我有兩層深度,所以當我輸入y的地圖功能時,我丟失了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中做到這一點。

+0

你是什麼意思,「失落」? –

回答

7

您首次嘗試使用map是一種有效的方法。你實際上並沒有失去x,因爲關閉。因此,有沒有錯,你的第二個代碼塊:

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

的爲這個循環的版本也很簡單:

@spaces = for x in [0...20] 
    for y in [0...20] 
    new Elements.Space(x, y) 

記住,一切都是表達式。所以這個工作(並可能比map版本更清晰)。

+1

for循環版本也不必爲了調用'map'而創建數組,'[0 ... 20]中的x​​'直接轉換成JavaScript for循環。 –

+0

謝謝!我把這個問題翻譯成簡單的東西最終解決了這個問題。從我在Chrome調試器中看到的,x是未定義的。但它的作品! – Chris