有没有一种很好的方法可以将哈希作为循环结果在coffeescript中?

时间:2014-04-24 09:09:25

标签: coffeescript

在coffeescript循环中是表达式并返回一个数组。例如,我们可以做

func = (name) -> name.toUpperCase()
result = (func prop for prop in ['a', 'b'])

得到结果:

['A','B']

但是如果我想获取哈希表(对象)而不是数组呢? 如何修改上面的示例以获取{ a: 'A', b: 'B' }

我知道,我可以这样做:

func = (name) -> name.toUpperCase()
result = {}
result[prop] = func prop for prop in ['a', 'b']
result

太冗长了!可能有更好的方式吗?

1 个答案:

答案 0 :(得分:2)

虽然不如真正的对象理解那么好,但您可以使用Array::reduce。特别是对于你的例子,使用"变换器"功能如:

transform = (f) -> (prev, curr) ->
  prev[curr] = f curr
  prev

您的func

func = (name) -> name.toUpperCase()

您可以使用transformfunc缩小数组,如下所示:

result = ['a', 'b'].reduce transform(func), {}

有关更长的说明和更多示例,请参阅Approximating object comprehension one-liners in CoffeeScript using Array.reduce()