在CoffeeScript中,有时我需要Array.reduce(...)使用默认值进行调用;但是,不幸的是,参数的排序意味着初始值/默认值位于reduce函数本身之后,这意味着我必须使用大量的paren,这似乎比CoffeeScript想要的丑陋得多。
例如:
items = [ (id:'id1', name:'Foo'), (id:'id2', name:'Bar') ] # ...
itemsById = items.reduce(((memo, item) -> # <-- Too many parens!
memo[item.id] = item
memo), {}) # Ugly!
Run Code Online (Sandbox Code Playgroud)
在CS中,是否有更惯用的方法来做到这一点?
这有效:
itemsById = items.reduce (memo, item) ->
memo[item.id] = item
memo
, {}
Run Code Online (Sandbox Code Playgroud)
我自己使用其他功能来运行它。如果它确实使事情变得一团糟(或者真的让我感到困扰),我可能会在其他地方声明该函数(可能在该行上方),然后将该函数作为参数传递,如下所示:
reduce_callback = (memo, item) ->
memo[item.id] = item
memo
itemsById = items.reduce reduce_callback, {}
Run Code Online (Sandbox Code Playgroud)
不幸的是,您纵向扩展了很多,这可能是不希望的。这仅是一般性建议。
| 归档时间: |
|
| 查看次数: |
814 次 |
| 最近记录: |