web-dev-qa-db-fra.com

dans CoffeeScript, comment puis-je utiliser une variable comme clé dans un hachage?

par exemple:

wtf

Donc:

foo = "asdf"
{foo: "bar"}
eval foo

# how do I get {"asdf": "bar"} ?

# this will throw parse error:
{(eval foo): "bar"}

Il s'agit d'une simple question de syntaxe: comment puis-je obtenir CoffeeScript pour construire un hachage dynamiquement, plutôt que de le faire à la main?

41
Giles Bowkett

Pour tous ceux qui trouveront cette question à l'avenir, à partir de CoffeeScript 1.9.1, les clés littérales d'objets interpolées sont prises en charge!

La syntaxe ressemble à ceci:

myObject =
  a: 1
  "#{ 1 + 2 }": 3

Voir https://github.com/jashkenas/coffeescript/commit/76c076db555c9ac7c325c3b285cd74644a9bf0d2

44
bcherny

Pourquoi utilisez-vous eval? Vous pouvez le faire exactement de la même manière que vous le feriez en JavaScript:

foo    = 'asdf'
h      = { }
h[foo] = 'bar'

Cela se traduit par ce JavaScript:

var foo, h;
foo = 'asdf';
h = {};
h[foo] = 'bar';

Et le résultat est que h ressemble à {'asdf': 'bar'}.

38
mu is too short

CoffeeScript, comme JavaScript, ne vous permet pas d'utiliser des expressions/variables comme clés dans les littéraux d'objet. Cela a été brièvement pris en charge, mais a été supprimé dans la version 0.9.6. Vous devez définir la propriété après avoir créé l'objet.

foo = 'asdf'

x = {}
x[foo] = 'bar'
alert x.asdf # Displays 'bar'
11
Jeremy Banks

Un peu moche mais un one-liner néanmoins (désolé d'être en retard):

{ "#{foo}": bar }

7
Danyel