Как определить массив анонимных объектов в CoffeeScript? Возможно ли это вообще, используя синтаксис YAML?
Я знаю, что наличие массива именованных объектов довольно просто:
items:[
item1:
name1:value1
item2:
name:value2
]
Однако было бы немного сложнее, если бы эти два объекта не имели имен
Ответ 1
вы не можете:
Вот некоторые трюки:
items:[
(name:"value1")
(name:"value2")
]
другое
items:[
true && name:"value1"
true && name:"value2"
]
это самое лучшее:
items:[
{name:"value1"}
{name:"value2"}
]
Ответ 2
Простой - поместите запятую отдельно в столбец ниже, чем вы определяете свои объекты.
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
}
];
Ответ 3
Вы также можете добавить кому между каждым объектом:
items:[
item1:
name1:value1
,
item2:
name:value2
]
Ответ 4
Я думаю, что запятое решение лучше, но я решил, что добавлю это для полноты:
a = [
{
nameA1: valueA1
nameA2: valueA2
nameA3: valueA3
}
{
nameB1: valueB1
nameB2: valueB2
nameB3: valueB3
}
]
Ответ 5
Вы можете определить переменную при определении массива, поэтому уродливый ответ будет следующим:
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"
}
]
}
Ответ 6
Не ответ на вопрос OP, но на всякий случай вы здесь по той же причине, что и я... Если вы на Горной Росе и используете "=" вместо ":", то Coffeescript будет превратите свой массив объектов в плоский массив без ошибки компиляции:
data = [
one='one'
two='two'
,
one='1'
two='2'
]
Выдает
['one', 'two', '1', '2']
Вставьте больше Mountain Dew и замените '=' на ':'.
Ответ 7
Я столкнулся с связанной проблемой и нашел это решение. Если вам нужен массив из нескольких одиночных объектов 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 } ]
Это контр-интуитивное мне; вы бы подумали, что это сделает под-объекты, но я думаю, что запятая в конце строки говорит ей прекратить делать свойства на этом объекте.
Ответ 8
Я очень рад сообщить после некоторого ворчания, что я мог бы получить это, чтобы скомпилировать сразу:
items: [
nameA: subA
nameB: subB
,
nameX: subX
nameY: subY
]
Это приводит к тому, что вы ожидаете: список из двух анонимных объектов.