Подтвердить что ты не робот

Определение массива анонимных объектов в CoffeeScript

Как определить массив анонимных объектов в CoffeeScript? Возможно ли это вообще, используя синтаксис YAML?

Я знаю, что наличие массива именованных объектов довольно просто:

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

Однако было бы немного сложнее, если бы эти два объекта не имели имен

4b9b3361

Ответ 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
]

Это приводит к тому, что вы ожидаете: список из двух анонимных объектов.