首页 > 解决方案 > Lodash 连接两种方法

问题描述

是否可以连接两个 lodash 方法?在我的情况下 uniqBy 和 sortBy

例子:

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

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

是否有可能两个将这两种方法应用于一个集合?

标签: javascriptlodash

解决方案


你有两个选择:

链接

这包装了您正在处理的值,然后您可以在不提供参数的情况下对其进行更多操作完成后.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]);

如果您使用的是 Lodash 的 FP 版本,则此实现是可能的。如果你不是,那么你必须对函数应用修饰符来翻转参数并使它们柯里化,这将使它们对函数式编程友好,类似于 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);

推荐阅读