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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有默认值的Array.reduce的CoffeeScript习惯用法相关的知识,希望对你有一定的参考价值。

在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中有更多惯用的方法吗?

答案

我自己也参与了其他功能。如果它真的乱七八糟(或者它真的困扰我),我可能会在其他地方声明该函数(可能在该行之上),然后将该函数作为参数传递,如下所示:

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

itemsById = items.reduce reduce_callback, {}

不幸的是,你需要垂直扩展,这可能是也可能不是。这只是一般性建议。

另一答案

这有效:

itemsById = items.reduce (memo, item) ->
  memo[item.id] = item
  memo
, {}
另一答案
items = [ {id:'id1', name:'Foo'}, {id:'id2', name:'Bar'} ]
itemsById = {}
itemsById[item.id] = item for item in items

清洁可读。

以上是关于具有默认值的Array.reduce的CoffeeScript习惯用法的主要内容,如果未能解决你的问题,请参考以下文章

Array.reduce 将多维数组转换为对象数组

reduce()方法详解

JS数组reduce()方法

js中数组reduce的使用原来这么简单

Array.prototype.reduce()

我如何匹配数字并创建二维数组?