带有默认值的Array.reduce的CoffeeScript习惯用法
在咖啡脚本中,有时我需要打电话;然而,不幸的是,参数的顺序意味着初始值/默认值在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] =
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中构建下划线管道或链接一组可枚举方法时)。