如何在CoffeeScript中定义匿名对象数组?使用YAML语法完全有可能吗?
我知道拥有一个命名对象数组非常容易:
items:[
item1:
name1:value1
item2:
name:value2
]
但是,如果这两个对象没有名称,则将有些棘手
如何在CoffeeScript中定义匿名对象数组?使用YAML语法完全有可能吗?
我知道拥有一个命名对象数组非常容易:
items:[
item1:
name1:value1
item2:
name:value2
]
但是,如果这两个对象没有名称,则将有些棘手
Answers:
您不能:
这是一些技巧:
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
}
];
[
到下一行的左边,它是作为混淆够..
我认为逗号解决方案更好,但是我想为完整起见添加此代码:
a = [
{
nameA1: valueA1
nameA2: valueA2
nameA3: valueA3
}
{
nameB1: valueB1
nameB2: valueB2
nameB3: valueB3
}
]
您可以在定义数组时定义变量,所以一个丑陋的答案是:
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"
}
]
}
经过一番摆弄之后,我很高兴地报告我可以正确编译该文件:
items: [
nameA: subA
nameB: subB
,
nameX: subX
nameY: subY
]
结果就是您所期望的:两个匿名对象的列表。
我遇到一个相关问题,找到了解决方案。如果您想要不带花括号的许多单个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 } ]
这对我来说是违反直觉的;您可能认为这会创建子对象,但是我认为该行末尾的逗号告诉它停止在该对象上创建属性。
Python
是我的“第一语言”,所以我不怕使用一些额外的括号和花括号。即使Coffeescript不需要它们,我也认为它们会有所帮助。您的第二个块更具可读性。