我正在学习函数式编程,并尝试使用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/

10-17 02:28