2012-07-13 7 views
7

Me preguntaba cuál sería la mejor forma de convertir (a partir de Python) una lista de comprensión en Javascript. ¿Hay algo que haga esto legible y no un desastre?¿Comprensión de matriz en 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 
         ] 

Este es un buen ejemplo de una lista por comprensión, ya que tiene múltiples for s y y un if.

debo añadir que el bit range está cubierto here (no puedo vivir sin range).

+3

Como desarrollador de JavaScript que no sabrían Python si se acercó para charlar en la parada de autobús, que es una sintaxis culo cobarde le Pythonistas tengo allí. – Utkanos

+2

Observe que JavaScript 1.7 tiene [Comprensión de matriz] (https://developer.mozilla.org/en/New_in_JavaScript_1.7#Array_comprehensions_%28Merge_into_Array_comprehensions%29), lamentablemente están implementados solo en Firefox en este momento. Espero que pronto también lo veamos en otros navegadores (ver [armonía] (http://wiki.ecmascript.org/doku.php?id=harmony:array_comprehensions) – ZER0

Respuesta

3

Bueno, sería un poco complicado hacer esto con el método .map(), porque las llamadas externas realmente necesitan devolver matrices. Por lo tanto usted es probablemente mejor con el peatón:

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

Correcto. Además, lo encerraría en un autoejecutable función asignada a la variable para proteger 'nonZero' – elclanrs

+1

@elclanrs sí, estoy de acuerdo, esto supone algún tipo de alcance similar al OP, pero si fuera algún tipo de herramienta,' nonZero' debería ser una variable local. – Pointy

2

Coffee script support lista la sintaxis de comprensión y es probablemente la más útil ya que sigue exactamente la sintaxis. Por desgracia, es un intermediario, y se calcularía a la línea de múltiples Javascript

http://coffeescript.org/#loops

te muestran cómo realizar conversiones de JavaScript básico.