javascript - Lodash 连接两个方法

标签 javascript lodash

是否可以连接两个 lodash 方法?就我而言,uniqBy 和 sortBy

示例:

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

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

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

最佳答案

你有两个选择:

Chaining

这会包装您要处理的值,然后您可以链接对其进行更多操作,而无需提供参数。完成后.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 release of Lodash,则可以实现此实现。 。如果不是,那么您必须对函数应用修饰符来翻转参数并使它们柯里化(Currying),这将使它们变得函数式编程友好,类似于 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);

关于javascript - Lodash 连接两个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55239706/

相关文章:

javascript - 将 jquery 添加到 firefox 扩展

javascript - 在javascript中无法将字符串转换为变量

javascript - Lodash 等于函数

javascript - 添加毫秒超时

javascript - Google Apps 脚本 CardService.setContent 为 HTML

javascript - lodash 选择 : set value if key not set

javascript - 在 AngularJS 中创建循环和过滤器

javascript - forEach 意外标记向现有数组添加新属性

javascript - 更改 h3 标签内容

javascript - 如何根据 Angular 5 中数组的多列获取唯一值?