在CoffeeScript中,我有时需要拨打Array.reduce(...)
with a default value;然而,参数的不幸排序意味着初始/默认值在reduce函数本身之后,这意味着我必须使用很多parens,这似乎比CoffeeScript想要的更加丑陋。
例如:
items = [ (id:'id1', name:'Foo'), (id:'id2', name:'Bar') ] # ...
itemsById = items.reduce(((memo, item) -> # <-- Too many parens!
memo[item.id] = item
memo), {}) # Ugly!
在CS中有更多惯用的方法吗?
答案 0 :(得分:5)
这有效:
itemsById = items.reduce (memo, item) ->
memo[item.id] = item
memo
, {}
答案 1 :(得分:5)
我自己也参与其他功能。如果它真的乱七八糟(或者它真的困扰我),我可能会在其他地方声明该函数(可能在该行之上),然后将该函数作为参数传递,如下所示:
reduce_callback = (memo, item) ->
memo[item.id] = item
memo
itemsById = items.reduce reduce_callback, {}
不幸的是,你需要垂直扩展,这可能是也可能不是。这只是一个普遍的建议。
答案 2 :(得分:0)
items = [ {id:'id1', name:'Foo'}, {id:'id2', name:'Bar'} ]
itemsById = {}
itemsById[item.id] = item for item in items
清洁可读。