2012-01-14 4 views
7

Tôi đang tìm cách mô tả các cấu trúc dữ liệu được sử dụng trong ứng dụng JavaScript của mình. Tôi thấy khó thực hiện việc này do tính năng động của JavaScript.Làm cách nào để ghi lại cấu trúc dữ liệu JavaScript/CoffeeScript

Ví dụ, những gì có thể là một cách tốt để nói, rằng một sử dụng biến khoảng cách là một mảng hai chiều với chiều dài i và j và lưu trữ số giữa -1MAX_INT. Tôi có thể nghĩ ra một cái gì đó như thế này:

distance[i][j] = -1 <= n <= MAX_INT 

gì về một đối tượng được sử dụng như một bản đồ/từ điển với nhiều loại dữ liệu nhất định, những gì về một mảng hai chiều mà các yếu tố đầu tiên của một mảng định nghĩa khác Sau đó, luôn luôn có thể ghi lại những điều này trong một văn bản, tôi chỉ nghĩ, có lẽ có một cách nổi tiếng và được sử dụng để làm điều này một cách bán kết.

Trả lời

3

Mặc dù nó không được thông qua quá rộng rãi (chưa?), Có một draft standard for JSON schema. Tôi chỉ học nó bản thân mình nhưng bạn có thể viết một schema cho mảng hai chiều của bạn (quấn bên trong của một đối tượng) như:

{ 
    "description":"Two dimensional array of numbers", 
    "type":"object", 
    "properties":{ 
     "two-d-array":{ 
      "description":"columns", 
      "type":"array", 
      "items":{ 
       "description":"rows", 
       "type":"array", 
       "items": { 
        "description":"values", 
        "type":"number", 
        "minimum":-1, 
        "maximum":Number.MAX_VALUE 
       } 
      } 
     } 
    } 
} 

hoặc đơn giản là:

{ 
    "type":"array", 
    "items":{ 
     "type":"array", 
     "items": { 
      "type":"number", 
      "minimum":-1, 
      "maximum":Number.MAX_VALUE 
     } 
    } 
} 

Không có thực hiện CoffeeScript mà tôi biết, nhưng có danh sách một số trình xác thực JavaScript here. Tôi đang chơi với một trong đó được viết bởi các tác giả cụ thể được gọi là (chỉ đơn giản là đủ) json-schema và tôi thích nó cũng đủ gọi nó từ CoffeeScript.

+0

Lưu ý: Số.MAX_VALUE không được hỗ trợ bởi lược đồ json. Bạn sẽ cần phải mở rộng cho mục đích của bạn. Tôi có xu hướng cố gắng giới hạn "INTs" thực sự của tôi thành 2^32-1, bởi vì các toán tử bitwise chỉ làm việc trên các số lớn này, nhưng về mặt kỹ thuật trong JavaScript bất kỳ số nào có mantissa phù hợp trong 2^53 được coi là hợp lệ. –

1

Những gì tôi có xu hướng làm trong JavaScript của mình khi tôi sao chép nhiều mô hình dữ liệu là viết ra định nghĩa lớp học của họ sẽ có trong nhận xét. Tôi không chắc chắn nếu đây là những gì bạn có nghĩa là với câu hỏi của bạn.

// JavaScript Class jsHomeLocation 
// jsHomeLocation{ 
// string name 
// string address 
// } 

var jsHomeLocation = {}; 
jsHomeLocation.name = "Travis"; 
jsHomeLocation.address = "California"; 

Bạn cũng có thể sử dụng đối tượng javascript để theo dõi thông tin của ví dụ, một mảng hai chiều

var distanceData = {}; 
distanceData.type = "two-dimensional array"; 
distanceData.length = i * j; 
distanceData.min = -1; 
distanceData.max = MAX_INT;