Coffeescript一个衬垫,用于创建带有变量键的hashmap

时间:2013-11-14 00:35:35

标签: javascript coffeescript

是否可以在coffeescript的一行中执行以下操作?

obj = {}
obj[key] = value

我试过了:

obj = { "#{key}": value }

但它不起作用。

5 个答案:

答案 0 :(得分:4)

(obj = {})[key] = value

将编译为

var obj;

(obj = {})[key] = value;

这是正常的javascript。您从coffeescript获得的唯一好处是您不必预先声明var s因为它适合您。

答案 1 :(得分:4)

It was removed from the language

  

抱歉迟到 - 如果我没记错的话,那是因为有些人   我们的其他语言功能取决于知道密钥   编译时间。例如,方法覆盖和超级调用   可执行类主体。我们想知道密钥的名称,以便a   可以建立适当的超级电话。

     

此外,它使得你必须在使用时关闭包装对象   作为表达式(常见情况),只要你有动态密钥。

     

最后,JavaScript中的动态键已经有了很好的语法   这是明确的你在做什么:obj[key] = value.

     

拥有{key: value, key: value}形式有一些好处   被限制为“纯”标识符作为键。

答案 2 :(得分:3)

对于将来发现此问题的任何人,从CoffeeScript 1.9.1开始,再次支持内插对象文字键!

语法如下:

puts hash.to_yaml

请参阅https://github.com/jashkenas/coffeescript/commit/76c076db555c9ac7c325c3b285cd74644a9bf0d2

答案 3 :(得分:1)

根据您的密钥的复杂程度,您始终可以使用与您的密钥匹配的变量名称,并使用它来定义对象,如下所示:

myKey = "Some Value"
obj = {myKey}

将编译为:

var myKey, obj;

myKey = "Some Value";

obj = {
  myKey: myKey
};

所以你最终得到的是关闭你所寻求的东西,但这要求你的密钥是有效的变量名。

答案 4 :(得分:1)

如果您正在使用underscore,则可以使用_.object函数,该函数与_.pairs函数相反。

_.pairs({a: 1, b: 'hello'})
//=> [['a', 1], ['b', 'hello']]

_.object([['a', 1], ['b', 'hello']])
//=> {a: 1, b: 'hello'}

因此,假设myKey = 'superkey'myValue = 100可以使用:

var obj = _.object([[myKey, myValue]]);
//=> obj = {superkey: 100}