Lodash fp(函数式编程)减少了不按我期望的方式工作

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)

Tha*_*you 5

无论是否使用函数式接口,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)