在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 ]
它的结果就是你所期望的:两个匿名对象的列表。