在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
太冗长了!可能有更好的方式吗?
答案 0 :(得分:2)
虽然不如真正的对象理解那么好,但您可以使用Array::reduce
。特别是对于你的例子,使用"变换器"功能如:
transform = (f) -> (prev, curr) ->
prev[curr] = f curr
prev
您的func
:
func = (name) -> name.toUpperCase()
您可以使用transform
和func
缩小数组,如下所示:
result = ['a', 'b'].reduce transform(func), {}
有关更长的说明和更多示例,请参阅Approximating object comprehension one-liners in CoffeeScript using Array.reduce()。