2012-07-13 59 views
7

我想知道最簡單的方法是將(從Python)的列表理解轉換爲Javascript。有沒有什麼能夠使這個可讀性不是一團糟?在JavaScript中的數組理解?

non_zero_in_square = [ grid[row][col] 
          for row in range(start_row, start_row+3) 
          for col in range(start_col, start_col+3) 
          if grid[row][col] is not 0 
         ] 

這是一個列表理解的相當一個很好的例子,因爲它有多個for S和和if

我應該補充range位被覆蓋here(我不能沒有range生活)。

+3

作爲一名JavaScript開發誰也不會知道Python的,如果它提出了在公交車站聊天,這就是你Pythonistas已經到了那裏一些時髦的屁股語法。 – Utkanos 2012-07-13 23:03:47

+2

請注意,JavaScript 1.7具有[Array Comprehension](https://developer.mozilla.org/en/New_in_JavaScript_1.7#Array_comprehensions_%28Merge_into_Array_comprehensions%29),不幸的是,目前僅在Firefox中實現。我希望我們很快會在其他瀏覽器中看到(請參閱[和諧](http://wiki.ecmascript.org/doku.php?id=harmony:array_comprehensions) – ZER0 2012-07-13 23:35:10

回答

3

好吧,用.map()方法做這件事會有點麻煩,因爲外層調用確實需要返回數組。因此,你可能是最好的行人:

var nonZero = []; 
for (var row = startRow; row < startRow + 3; ++row) 
    for (var col = startCol; col < startCol + 3; ++col) 
    if (grid[row][col] !== 0) nonZero.push(grid[row][col]; 
+0

)。對,我會把它放在一個自動執行的函數分配給變量來保護'非零' – elclanrs 2012-07-13 23:14:00

+1

@elclanrs是的,我同意,它假定某種類似於OP的範圍,但如果它是某種工具,那麼'nonZero'應該是一個局部變量 – Pointy 2012-07-13 23:17:17

2

咖啡腳本支持列表理解的語法,可能是最好的,因爲它完全遵循語法。不幸的是它是一箇中介,並會被編譯成多行的javascript

http://coffeescript.org/#loops

他們告訴你如何覆羽香草的JavaScript。