43 votes

L'objet de la compréhension en CoffeeScript [dict/hachage des compréhensions]

est-il possible de retourner un objet à partir d'une compréhension en coffeescript? quelque chose afin que je puisse l'exprimer ainsi:

form_values = () ->
  ret = {}
  ret[f.name] = f.value for f in $('input, textarea, select')
  return ret

comme ceci:

form_values = () -> f.name, f.value for f in $('input, textarea, select')

j'aimerais construire un objet unique (pas un tableau d'objets). donc, si le balisage ressemble à quelque chose comme ceci:

<form name=blah>
  <input type=text name=blah1 value=111 />
  <textarea name=blah2>222</textarea>
  <select name=blah3>
    <option value=333a>
    <option value=333b>
  </select>
</form>

l'objet retourné serait quelque chose comme ceci:

{
  blah1: '111',
  blah2: '222',
  blah3: ''
}

26voto

matyr Points 4025
form_values = new ->
  @[f.name] = f.value for f in $ 'input, textarea, select'
  this

ou

form_values = new class then constructor: ->
  @[f.name] = f.value for f in $ 'input, textarea, select'

23voto

Trevor Burnham Points 43199

Nope. Interprétations de retourner uniquement les tableaux en CoffeeScript. La recherche de l'outil de suivi pour objet des compréhensions, et vous en trouverez plusieurs propositions, mais aucune n'a été trouvé convenable.

7voto

tokland Points 29813

De vérifier la fonctionnelle de la bibliothèque de soulignement et l'extension _.mash de ce mixin:

form_values = ->
  _($('input, textarea, select')).mash f -> [f.name, f.value]

7voto

reubano Points 369

À l'aide de souligner la fonction de l'objet, vous pouvez le faire:

form_values = _.object([f.name, f.value] for f in $('input, textarea, select'))

4voto

Sylvain Leroux Points 9401

Cela a déjà été répondu, mais probablement de l'absence de certaines explications que cet idiome est plutôt énigmatique au premier abord:

form_values = (new -> @[f.name] = f.value for f in $ 'input, textarea, select'; @)
//             ^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^  
//           create                      with                                   |
//           a new                       that                                   |
//           empty                     anonymous                                |
//           object                   constructor                               |
//                                                                don't forget -/
//                                                                to return the
//                                                             newly created object

L'idée clé est de créer un objet vide (new) avec un anonyme, un constructeur (-> ...) qui permettra de créer les différents champs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X