我正在学习函数式编程,并尝试使用lodash FP重构一段旧代码。
这是我的代码:
_.filter(x => isIdInArray(x)(xs))(otherXs)
读起来太复杂了,让我感到有点奇怪(闻到吗?)
我的问题是这样声明x值,即isIdInArray的第一个参数:
const getId = _.get('id');
const isIdInArray = _.compose(_.includes, getId);
我不能通过这种方式使用lodash过滤器功能:
_.filter(isIdInArray(xs))(otherXs)
我什至不知道这是否可行,但是我很确定自己可以做得更清楚或更易读。
你有什么主意吗?
最佳答案
如果您要编写生产代码,则建议使用更高级别的函数。在您的特殊情况下,我会说您需要_.intersectionBy
:
const keepIfIdInArray = _.intersectionBy('id'); // 'id' can be replaced by your getId
const keepIfIdInOtherXs = keepIfIdInArray(otherXs);
keepIfIdInOtherXs(xs);
如果您是作为练习来执行此操作,那么我想您可能需要分解更多一点。请注意,在lodash / fp中,
_.includes
已被管理,因此您应该能够编写以下内容:const getId = _.get('id');
const isIdInArray = arr => _.compose(_.includes(arr), getId);
const isIdInOtherXs = isIdInArray(otherXs);
_.filter(isIdInOtherXs)(xs);
关于javascript - lodash fp并重构一些现有代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51410094/