带有默认值的Array.reduce的CoffeeScript习惯用法

带有默认值的Array.reduce的CoffeeScript习惯用法,coffeescript,Coffeescript,在咖啡脚本中,有时我需要打电话;然而,不幸的是,参数的顺序意味着初始值/默认值在reduce函数之后,这意味着我必须使用很多参数,这似乎比CoffeeScript想要的要难看得多 例如: items=[(id:'id1',name:'Foo'),(id:'id2',name:'Bar')]#。。。 itemsbyd=items.reduce((备忘录,项目)->这项功能: itemsById = items.reduce (memo, item) -> memo[item.id] =

在咖啡脚本中,有时我需要打电话;然而,不幸的是,参数的顺序意味着初始值/默认值在reduce函数之后,这意味着我必须使用很多参数,这似乎比CoffeeScript想要的要难看得多

例如:

items=[(id:'id1',name:'Foo'),(id:'id2',name:'Bar')]#。。。
itemsbyd=items.reduce((备忘录,项目)->这项功能:

itemsById = items.reduce (memo, item) ->
  memo[item.id] = item
  memo
, {}

我自己也曾在其他函数中遇到过这种情况。如果它真的把事情搞得一团糟(或者它真的让我很烦恼),我可能会在其他地方声明该函数(可能在该行上方),然后将该函数作为参数传递,类似这样:

reduce_callback = (memo, item) ->
    memo[item.id] = item
    memo

itemsById = items.reduce reduce_callback, {}
不幸的是,您垂直扩展了一整批,这可能是可取的,也可能不是可取的。这只是一个一般性的建议。

items=[{id:'id1',name:'Foo'},{id:'id2',name:'Bar'}]
itemsById={}
itemsById[item.id]=项目中项目的项目

干净易读。

+1这是一个很好的选择,但领先的
,{}
在最后一行,需要目视回溯到
itemsbyd
行,然后扫描到该行的末尾;最终,这对我来说似乎并不比我的示例更清楚=\n我做了类似的事情,特别是在将函数与回调链接时(例如,在Ruby中构建下划线管道或链接一组可枚举方法时)。