2012-01-27 22 views
97

如何定義的CoffeeScript匿名對象的數組?這是可能的話,使用YAML語法?定義匿名對象的數組中的CoffeeScript

我知道,有一個名爲對象的數組是很容易的:

items:[ 
    item1: 
     name1:value1 
    item2: 
     name:value2 
] 

然而,這將是一個有點麻煩,如果這兩個對象沒有名稱

回答

31

不能:

這是一些技巧:

items:[ 
    (name:"value1") 
    (name:"value2") 
] 

另一個

items:[ 
    true && name:"value1" 
    true && name:"value2" 
] 

這是最好的:

items:[ 
    {name:"value1"} 
    {name:"value2"} 
] 
+6

是不是這麼醜:(CoffeeScript中是非常好的了它是一個基於縮進編碼,但對於大型對象文本,它比標準的JSON也不遑多讓,你必須權衡了所有的支架和你結束了討厭的懸架托架湯有是解決這一點,並使用YAML語法票,但顯然存在CoffeeScript的解析歧義解決這個這是不幸的。 – bradgonesurfing 2012-04-16 16:46:28

+0

而不是「真&&」你當然可以用等價物「是和」或「否或者」 「是的」連那種有道理這裏 – 2012-12-03 03:04:47

+12

看看我的答案 - 。這是一個沒有任何技巧或支架完全可行 – 2012-12-27 18:15:19

39

您還可以添加一個昏迷的每個對象之間:

items:[ 
    item1: 
     name1:value1 
    , 
    item2: 
     name:value2 
] 
288

簡單 - 在低於一列中放置一個逗號本身你定義你的對象。

a = [ 
    nameA1: valueA1 
    nameA2: valueA2 
    nameA3: valueA3 
    , 
    nameB1: valueB1 
    nameB2: valueB2 
    nameB3: valueB3 
] 

將變爲:

var a; 

a = [ 
    { 
    nameA1: valueA1, 
    nameA2: valueA2, 
    nameA3: valueA3 
    }, { 
    nameB1: valueB1, 
    nameB2: valueB2, 
    nameB3: valueB3 
    } 
]; 
+1

,因爲它的一個奇怪的看着溶液和逗號很容易錯過 – 2013-10-03 23:29:09

+0

這是危險的!有時候只給你最後一個項目的數組!見下面的例子.. – 2013-10-11 19:41:55

+1

@DeanRadcliffe它會返回數組中的最後一項,如果你沒有正確放置逗號,是的,但不是建立在通過語法糖的約定前提下的CoffeeScript? – dubilla 2014-01-16 21:42:44

14

我認爲逗號的解決方案是更好的,但我想我會添加此的完整性:

a = [ 
    { 
    nameA1: valueA1 
    nameA2: valueA2 
    nameA3: valueA3 
    } 
    { 
    nameB1: valueB1 
    nameB2: valueB2 
    nameB3: valueB3 
    } 
] 
+0

我認爲這比逗號解決方案好得多,你必須小心逗號放置。 – nima 2015-09-05 06:50:30

0

我遇到了一個相關的問題,找到這個解決方案如果你想多單ķ/ V對象沒有括號的數組,就縮進一些。似乎要做的伎倆。

data = [          
    "2013-09-25T16:46:52.636Z":3,    
    "2013-09-25T16:47:52.636Z":6,    
     "2013-09-25T16:48:52.636Z":2,   
     "2013-09-25T16:49:52.636Z":7,   
    "2013-09-25T16:50:52.636Z":5,    
    "2013-09-25T16:51:52.636Z":2,    
     "2013-09-25T16:52:52.636Z":1,   
     "2013-09-25T16:53:52.636Z":3,   
    "2013-09-25T16:54:52.636Z":8,    
    "2013-09-25T16:55:52.636Z":9,    
     "2013-09-25T16:56:52.636Z":2,   
     "2013-09-25T16:57:52.636Z":5,   
      "2013-09-25T16:58:52.636Z":7  
]            

產地:

coffee> data 
[ { '2013-09-25T16:46:52.636Z': 3 }, 
    { '2013-09-25T16:47:52.636Z': 6 }, 
    { '2013-09-25T16:48:52.636Z': 2 }, 
    { '2013-09-25T16:49:52.636Z': 7 }, 
    { '2013-09-25T16:50:52.636Z': 5 }, 
    { '2013-09-25T16:51:52.636Z': 2 }, 
    { '2013-09-25T16:52:52.636Z': 1 }, 
    { '2013-09-25T16:53:52.636Z': 3 }, 
    { '2013-09-25T16:54:52.636Z': 8 }, 
    { '2013-09-25T16:55:52.636Z': 9 }, 
    { '2013-09-25T16:56:52.636Z': 2 }, 
    { '2013-09-25T16:57:52.636Z': 5 }, 
    { '2013-09-25T16:58:52.636Z': 7 } ] 

這是反直覺我。你會認爲這將使子對象,但我認爲在該行的末尾逗號告訴它停止該對象的加工特性。

+0

雖然這個工作,我懷疑這是線如何解析的副作用。由於連續的行不具有相同的縮進,因此不能將它們放在同一個對象中。顯然,它不會引發語法錯誤,而是啓動一個新對象。這是一個功能,可能不應該指望 - 除非你能找到它的記錄。 – hpaulj 2013-09-25 20:11:02

+0

@hpaulj好,如果你有一個更好的辦法來做到這一點,我所有的耳朵 – jcollum 2013-09-25 20:55:54

+1

由於'Python'是我的第一語言',我不害怕使用了一些額外的括號和大括號。即使Coffeescript不需要它們,我也覺得它們很有幫助。你的第二塊更具可讀性。 – hpaulj 2013-09-25 22:28:06

1

不是一個答案OP的問題,但以防萬一你在這裏出於同樣的原因我......如果你在激浪和使用「=」,而不是很低「:」,然後CoffeeScript的會變成你的對象的數組成平面陣列,而不編譯錯誤:

data = [ 
    one='one' 
    two='two' 
    , 
    one='1' 
    two='2' 
] 

主要生產

['one', 'two', '1', '2'] 

插入更多的激浪和更換「=」與「:」。

+2

跆拳道山脈露水與此有關嗎? – fent 2014-12-05 20:52:01

+1

書呆子燃料。咄。 – Seth 2014-12-06 01:12:53

2

在定義陣列可以定義變量,所以一個醜陋的答案是:

a = 
    items: [ 
    item1 = 
     name: 'value1' 
    item2 = 
     name: 'value2' 
    ] 

它的工作,但你可能會得到關於警告「定義,但不使用的變量(ITEM1,ITEM2)」。更好的辦法是使用下劃線,使用可變省略未使用的變量:

a = 
    items: [ 
    _ = 
     name: 'value1' 
    _ = 
     name: 'value2' 
    ] 

console.log JSON.stringify(a)會產生這樣的:

{ 
    "items":[ 
     { 
     "name":"value1" 
     },{ 
     "name":"value2" 
     } 
    ] 
    } 
0

我很高興有點擺弄,我可以的後報告得到這個編譯恰到好處:

items: [ 
    nameA: subA 
    nameB: subB 
, 
    nameX: subX 
    nameY: subY 
] 

它的結果是你所期望的正是:兩個匿名對象的列表。