能否串联使用Lodash的uniqBy与sortBy方法处理同一集合?
当然可以串联Lodash的uniqBy和sortBy方法!
完全没问题,Lodash的设计本身就很支持这种方法的组合调用,有两种常见的方式可以实现你的需求,而且比分开写更简洁:
方式一:链式调用(可读性更高)
Lodash提供了_.chain()方法来开启链式调用,你可以把集合传入后,依次调用uniqBy和sortBy,最后用value()获取最终结果:
const processedClients = _.chain(potentialClients) .uniqBy(contact => contact.phoneNumbers[0].number) .sortBy(contact => contact.givenName) .value();
如果你的环境支持隐式链式(比如使用Lodash的模块化导入或者完整库),甚至可以不用_.chain(),直接链式调用:
// 注意:这种写法需要确保集合是经过Lodash包装过的,或者使用Lodash/fp版本 const processedClients = _.uniqBy(potentialClients, contact => contact.phoneNumbers[0].number) .sortBy(contact => contact.givenName);
方式二:嵌套调用(更直接)
如果你不习惯链式写法,也可以直接把uniqBy的返回结果作为sortBy的输入参数,这样逻辑也很清晰:
const processedClients = _.sortBy( _.uniqBy(potentialClients, contact => contact.phoneNumbers[0].number), contact => contact.givenName );
小提示
你原来的代码里用了[...potentialClients]来复制数组,其实Lodash的uniqBy和sortBy都是纯函数,不会修改原数组,所以如果不需要额外复制的话,直接传入原数组就行啦。如果确实需要避免原数组的引用影响,保留展开运算符也完全没问题。
内容的提问来源于stack exchange,提问作者lecham
相关产品推荐
相关产品推荐

