web-dev-qa-db-fra.com

Définir un tableau d'objets anonymes dans CoffeeScript

Comment définir un tableau d'objets anonymes dans CoffeeScript? Est-ce possible, en utilisant la syntaxe YAML?

Je sais qu'avoir un tableau d'objets nommés est assez simple:

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

Cependant, ce serait un peu plus compliqué, si ces deux objets n'avaient pas de nom 

103
Preslav Rachev

vous ne pouvez pas:

voici quelques astuces:

items:[
    (name:"value1")
    (name:"value2")
]

un autre

items:[
    true && name:"value1"
    true && name:"value2"
]

c'est le meilleur:

items:[
    {name:"value1"}
    {name:"value2"}
]
28
island205

Simple - placez une virgule par elle-même dans une colonne inférieure à celle dans laquelle vous définissez vos objets.

a = [
     nameA1: valueA1
     nameA2: valueA2
     nameA3: valueA3
  ,
     nameB1: valueB1
     nameB2: valueB2
     nameB3: valueB3
]

Va devenir:

var a;

a = [
  {
    nameA1: valueA1,
    nameA2: valueA2,
    nameA3: valueA3
  }, {
    nameB1: valueB1,
    nameB2: valueB2,
    nameB3: valueB3
  }
];
298
Michael Hays

Vous pouvez également ajouter une virgule entre chaque objet:

items:[
    item1:
        name1:value1
  ,
    item2:
        name:value2
]
39
arthur

Je pense que la solution par virgule est meilleure, mais je me suis dit que j'ajouterais ceci pour être complet: 

a = [
  {
    nameA1: valueA1
    nameA2: valueA2
    nameA3: valueA3
  }
  {
    nameB1: valueB1
    nameB2: valueB2
    nameB3: valueB3
  }
]
14
Evan Moran

Vous pouvez définir une variable tout en définissant un tableau, ainsi une réponse laide serait:

a = 
  items: [
    item1 = 
      name: 'value1'
    item2 = 
      name: 'value2'
  ]

Cela fonctionnerait, mais vous pourriez recevoir des avertissements sur les "variables définies, mais non utilisées (item1, item2)". Le meilleur moyen serait d’utiliser le trait de soulignement, variable utilisée pour omettre les variables non utilisées:

a = 
  items: [
    _ = 
      name: 'value1'
    _ = 
      name: 'value2'
  ]

console.log JSON.stringify(a) produira ceci:

  {
    "items":[
      {
        "name":"value1"
      },{
        "name":"value2"
      }
    ]
  }
3
remiq

Pas une réponse à la question du PO, mais juste au cas où vous êtes ici pour la même raison que moi ... Si vous êtes à court de Mountain Dew et utilisez '=' au lieu de ':', Coffeescript transformera votre tableau d'objets dans un tableau plat sans erreur de compilation:

data = [
    one='one'
    two='two'
  ,
    one='1'
    two='2'
]

Produit

['one', 'two', '1', '2']

Insérez plus de Mountain Dew et remplacez le '=' par ':'.

1
Seth

Je suis très heureux d'annoncer, après un peu de bidouillage, que je pourrais le compiler parfaitement:

items: [
  nameA: subA
  nameB: subB
,
  nameX: subX
  nameY: subY
]

Il en résulte exactement ce que vous attendez: une liste de deux objets anonymes.

1
Prathan Thananart

J'ai rencontré un problème connexe et trouvé cette solution. Si vous voulez un tableau de nombreux objets k/v sans accolades, indiquez simplement certains d’entre eux. Semble faire l'affaire. 

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       
]                                            

Produit: 

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 } ]

C'est contre-intuitif pour moi; vous penseriez que cela ferait des sous-objets mais je pense que la virgule à la fin de la ligne lui dit d'arrêter de créer des propriétés sur cet objet 

0
jcollum

Pourquoi pas: 

list = []
list.Push
  prop1: val
  prop2: val
list.Push
  prop1: val
  prop2: val

C'est toujours une énorme amélioration pour moi sur js, très facile à lire, minimale et assez sûre pour écrire.

0
erandros