如何在CoffeeScript中定义匿名对象数组?这是否可行,使用YAML语法?
我知道拥有一组命名对象非常简单:
items:[
item1:
name1:value1
item2:
name:value2
]
但是,如果这两个对象没有名称
,那将会有点棘手答案 0 :(得分:299)
简单 - 将逗号单独放在低于您定义对象的列中。
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 :(得分:40)
您还可以在每个对象之间添加逗号:
items:[
item1:
name1:value1
,
item2:
name:value2
]
答案 2 :(得分:28)
你不能:
这是一些技巧:
items:[
(name:"value1")
(name:"value2")
]
另一个
items:[
true && name:"value1"
true && name:"value2"
]
这是最好的:
items:[
{name:"value1"}
{name:"value2"}
]
答案 3 :(得分:14)
我认为逗号解决方案更好,但我想我会为了完整性添加它:
a = [
{
nameA1: valueA1
nameA2: valueA2
nameA3: valueA3
}
{
nameB1: valueB1
nameB2: valueB2
nameB3: valueB3
}
]
答案 4 :(得分:3)
你可以在定义数组时定义变量,所以一个丑陋的答案是:
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"
}
]
}
答案 5 :(得分:1)
不是OP的问题的答案,但是如果你出于同样的原因我就在这里...如果你在Mountain Dew上使用'='而不是':',那么Coffeescript将会将您的对象数组转换为平面数组而不会出现编译错误:
data = [
one='one'
two='two'
,
one='1'
two='2'
]
可生产
['one', 'two', '1', '2']
插入更多Mountain Dew并将'='替换为':'。
答案 6 :(得分:0)
我遇到了一个相关的问题并找到了这个解决方案。如果你想要一个没有大括号的许多单个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 } ]
这对我来说是违反直觉的;你会认为这会产生子对象,但我认为该行末尾的逗号告诉它停止在该对象上创建属性。
答案 7 :(得分:0)
为什么不:
list = []
list.push
prop1: val
prop2: val
list.push
prop1: val
prop2: val
与js相比,这对我来说仍然是一个巨大的进步,非常易于阅读,最小并且很安全。