2012-01-14 58 views
7

我正在尋找描述性的方式來記錄我的JavaScript應用程序中使用的數據結構。由於JavaScript的動態特性,我很難完成這項工作。如何記錄JavaScript/CoffeeScript數據結構

例如,這可能是告訴一個很好的方法,即一個使用可變距離是具有長度的二維陣列i和和MAX_INT之間-1j和存儲數字。我能想到的是這樣的:

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

什麼其被用作某些數據類型的一個地圖/字典一個對象,關於二維陣列什麼其中數組的第一元素定義其它數據然後是其餘的等等。

當然,總是可以在文本中記錄這些東西,我只是想,也許有一種衆所周知的方式以半正式的方式來完成此操作。

回答

3

雖然這不是太廣泛採用(沒有?),有一個draft standard for JSON schema。我剛開始學習自己,但你可以寫你的二維數組(包裝對象的內部)的模式爲:

{ 
    "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 
       } 
      } 
     } 
    } 
} 

或者乾脆:

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

沒有執行的CoffeeScript我知道的,但是有幾個JavaScript驗證器here的列表。我正在玩被規範作者所寫的那個(簡單地說)json-schema,我很喜歡從CoffeeScript中調用它。

+0

注意:json-schema不支持Number.MAX_VALUE。你需要擴展你的目的。我傾向於試圖將真正的「INTs」限制爲2^32-1,因爲按位運算符只處理這麼大的數字,但從技術上講,在JavaScript中,任何數字的尾數適合於2^53都被認爲是有效的。 – 2012-01-14 12:29:09

1

當我複製大量數據模型時,我傾向於在JavaScript中執行的操作是寫出他們的類定義將在註釋中。我不確定這是否是您的問題。

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

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

你也可以使用JavaScript對象跟蹤的例子的信息,二維數組

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