Lodash FP (функциональное программирование) уменьшить не работает, как я ожидаю, что это будет работать

1

Используя обычный 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)
  • 1
    В чем вопрос?
  • 0
    @hackerrdave Вопрос в том, как заставить его работать как все остальные функции fp? Композитным способом. Так как все остальные функции fp работают нормально, за исключением Reduce, я пытаюсь найти то, что я делаю здесь неправильно.
Теги:
functional-programming
lodash

1 ответ

2
Лучший ответ

сокращение принимает 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
  • 0
    Благодарю. Это сработало. Теперь я понимаю, что я сделал не так. Я не указывал начальное значение (не уверен, как оно называется). Я привык не использовать его в Array.reduce (), поэтому по привычке его там не поместили. Я также конвертировал chain.map.reduce.value, который также не использует его. Дурак я.
  • 1
    Рассмотрите возможность использования fp.flow для fp.compose , fp.compose порядок может показаться более естественным. fp.compose является псевдонимом fp.flowRight .
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню