Используя обычный lodash без fp, вы бы сделали что-то вроде
chain(array).map(..).reduce(...).value()
С fp вы бы сделали
compose(reduce(...), map(...))(array)
Я могу заставить его работать для многих методов (flatten, sort, map), кроме сокращения.
Вы ожидаете, что он (lodash/fp/reduce) будет работать как
reduce((a,b)=>a+b, 0)([1,2,3])
Но для версии fp все еще требуются 3 аргумента, что для меня не имеет смысла. Все остальные функции работают для меня, за исключением сокращения
func(...)(array)
Как я могу сделать fpreduce работу, как и другие функции fp таким образом:
compose(reduce(...), map(...), flatten(...))(array)
сокращение принимает 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
Или как встроенный состав
fp.compose (fp.reduce (fp.add, 0), fp.map (x => x * x)) ([1,2,3,4])
// => 30
fp.flow
для fp.compose
, fp.compose
порядок может показаться более естественным. fp.compose
является псевдонимом fp.flowRight
.