ahs*_*aus 3 javascript functional-programming lodash
使用没有 fp 的普通 lodash,你会做类似的事情
chain(array).map(..).reduce(...).value()
Run Code Online (Sandbox Code Playgroud)
有了 fp,你就可以了
compose(reduce(...), map(...))(array)
Run Code Online (Sandbox Code Playgroud)
我可以让它适用于许多方法(展平、排序、映射),但reduce 除外。
你会期望它(lodash/fp/reduce)像这样工作
reduce((a,b)=>a+b, 0)([1,2,3])
Run Code Online (Sandbox Code Playgroud)
但 fp 版本仍然需要 3 个参数,这对我来说没有意义。所有其他功能对我来说都是这样工作的,除了减少
func(...)(array)
Run Code Online (Sandbox Code Playgroud)
如何使 fpreduce 像其他 fp 函数一样工作:
compose(reduce(...), map(...), flatten(...))(array)
Run Code Online (Sandbox Code Playgroud)
无论是否使用函数式接口,reduce 总共需要 3 个参数。lodash/fp只需更改参数顺序并允许您部分运行
const fp = require ('lodash/fp')
const sum = fp.reduce (fp.add, 0)
const sq = x => x * x
const main = fp.compose (sum, fp.map (sq))
console.log (main ([1,2,3,4]))
// => 30
// [1,2,3,4] => [1,4,9,16] => 0 + 1 + 4 + 9 + 16 => 30
Run Code Online (Sandbox Code Playgroud)
或者作为内联组合
fp.compose (fp.reduce (fp.add, 0), fp.map (x => x * x)) ([1,2,3,4])
// => 30
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4034 次 |
| 最近记录: |