Coffeescript做列表理解对象

时间:2013-07-07 21:36:10

标签: coffeescript

为什么coffeescript不会返回对象键,而是将x的值视为字符串'x'?

coffee> a  = { test: '0', super: '1' }
coffee> x for x,y of a
[ 'test', 'super' ]
coffee> {x:y} for x,y of a
[ { x: '0' }, { x: '1' } ]

1 个答案:

答案 0 :(得分:3)

因为这就是CoffeeScript object literal syntax的工作方式。假设它按照您希望的方式工作。如果在某个地方我会这样说会发生什么:

window.test = 'pancakes'

这只会导致test变量进入每个人的范围,而且您的a会突然变为:

a = { 'pancakes': '0', super: '1' }

你会想知道你的电脑究竟是什么样的废话。因此,如果属性名称被评估为变量而不是无引号字符串,那么我们最终都会编写丑陋的内容,例如:

a = { 'test': '0', 'super': '1' }

只是为了获得可预测且一致的结果。

我认为获得所需内容的最简单方法是添加一些功能:

objectify = (k, v) ->
    o = { }
    o[k] = v
    o

然后你可以:

a = (objectify(x, y) for x, y of o)

演示:http://jsfiddle.net/ambiguous/M8AFk/