2012-07-13 12 views
7

Tôi đã tự hỏi những gì cách gọn gàng nhất là chuyển đổi (từ Python) một danh sách hiểu thành Javascript. Có bất cứ điều gì mà sẽ làm cho điều này có thể đọc được và không phải là một mớ hỗn độn?Hiểu mảng trong 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 
         ] 

này là khá một ví dụ tốt về một hiểu danh sách, vì nó có nhiều for s và và một if.

Tôi nên thêm rằng range bit được bao gồm here (Tôi không thể sống mà không có range).

+3

Là một nhà phát triển JavaScript ai mà không biết Python nếu nó đã đưa ra cho một cuộc trò chuyện tại trạm xe buýt, đó là một số cú pháp ass sôi nổi bạn Pythonistas đã có ở đó. – Utkanos

+2

Lưu ý rằng JavaScript 1.7 có [Array Comprehension] (https://developer.mozilla.org/en/New_in_JavaScript_1.7#Array_comprehensions_%28Merge_into_Array_comprehensions%29), rất tiếc là chỉ được thực hiện trong Firefox vào lúc này. Tôi hy vọng chúng ta sẽ sớm có mặt trong các trình duyệt khác (xem [hài hòa] (http://wiki.ecmascript.org/doku.php?id=harmony:array_comprehensions) – ZER0

Trả lời

3

Cũng sẽ hơi lộn xộn khi thực hiện điều này với phương pháp .map(), bởi vì các cuộc gọi bên ngoài thực sự cần trả về mảng. Như vậy có lẽ bạn đang tốt nhất với người đi bộ:

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

Đúng. Tôi sẽ kèm theo nó trong tự thực hiện function gán cho biến để bảo vệ 'nonZero' – elclanrs

+1

@elclanrs yes Tôi đồng ý, điều này giả định một số loại phạm vi tương tự như OP, nhưng nếu nó là một loại công cụ thì' nonZero' phải là một biến cục bộ. – Pointy

2

Cú pháp hiểu danh sách hỗ trợ tập lệnh cà phê và có lẽ là gọn gàng nhất khi cú pháp tuân thủ cú pháp chính xác. Đáng tiếc là nó là một trung gian và sẽ được biên dịch để đa dòng javascript

http://coffeescript.org/#loops

Họ chỉ cho bạn cách nó lông để Vanilla javascript.