Lodash объединяет два метода - PullRequest
0 голосов
/ 19 марта 2019

Можно ли объединить два метода lodash? В моем случае uniqBy и sortBy

Пример:

const uniquePotentialClients = _.uniqBy(
    [...potentialClients],
    uniqueContact => uniqueContact.phoneNumbers[0].number,
 );

 const sortPotentialClients = _.sortBy(
    [...potentialClients],
    uniqueContact => uniqueContact.givenName,
 );

Возможно ли применить два этих метода к одной коллекции?

1 Ответ

2 голосов
/ 19 марта 2019

У вас есть два варианта:

Цепочка

Это оборачивает значение, с которым вы будете работать, и тогда вы можете цепочка больше операцийна нем без указания параметра.По окончании .value() извлекает конечное значение.

const result = _.chain([...potentialClients])
  .uniqBy(uniqueContact => uniqueContact.phoneNumbers[0].number)
  .sortBy(uniqueContact => uniqueContact.givenName)
  .value();

Использование функциональной композиции

const uniqFn = _.uniqBy(uniqueContact => uniqueContact.phoneNumbers[0].number);
const sortFn = _.sortBy(uniqueContact => uniqueContact.givenName);

const composedFn = _.flow(uniqFn, sortFn);

const result = composedFn([...potentialClients]);

Эта реализация возможна, если вы используете FP выпуск Lodash .Если нет, то вам нужно применить модификаторы к функциям, чтобы перевернуть аргументы и сделать их карри, что сделает их функциональное программирование дружественным, подобно тому, как это делает lodash / fp.Вот пример того, как это можно сделать:

 //_.curry requires the arity to be declared, passing 2 satisfies both these functions
const makeFpFriendly = f => _.curry(_.flip(f), 2);

const uniqByFpFriendly = makeFpFriendly(_.uniqBy);
const sortByFpFriendly = makeFpFriendly(_.sortBy);
...