在CoffeeScript中定义一个匿名对象的数组

如何在CoffeeScript中定义一个匿名对象数组? 这是可能的,使用YAML语法?

我知道有一个命名对象的数组是很容易的:

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

但是,如果这两个对象没有名字,那将会有点棘手

你不能:

这是一些伎俩:

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

另一个

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

这是最好的:

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

简单 – 将自己的逗号放置在比定义对象更低的列中。

 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 } ]; 

您也可以在每个对象之间添加一个昏迷:

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

我认为逗号解决scheme更好,但我想我会添加这个完整性:

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

你可以在定义数组的时候定义variables,所以一个丑陋的答案是:

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

它可以工作,但是可能会收到有关“已定义但未使用的variables(item1,item2)”的警告。 更好的方法是使用下划线,用于省略未使用variables的variables:

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

console.log JSON.stringify(a)将产生这样的:

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

不是OP的问题的答案,但是,如果你在这里出于同样的原因我是…如果你在山露水低,并使用'='而不是':',那么Coffeescript将把你的arrays没有编译错误的平面数组中的对象:

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

产生

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

插入更多的Mountain Dew,并用':'代替'='。

我碰到一个相关的问题,并find了这个解决scheme。 如果你想要一个没有大括号的单个k / 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 } ] 

这对我来说是非直觉的。 你会认为这会产生子对象,但是我认为行尾的逗号告诉它停止在该对象上创build属性。

我很高兴通过一些小小的调查来报告,我可以把它编译得恰到好处:

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

它的结果就是你所期望的:两个匿名对象的列表。