作为 wrap-chain-unwrap 模式的替代方案(它本身并没有错,但替代方案总是很有趣),还有另一种方法可以检查。
尝试利用_.flow。
这个想法是flow 中的每个函数都将接收前一个函数的输出作为输入,这正是您所需要的。
举个例子,给定这个数据:
var foundUser = {
charData: []
};
var rows = [{ok: 1, blah: 'nope'}];
使用Lodash FP,我们可以将数据作为最后一个参数传递。此功能以及 Lodash/fp 中每种方法的自动柯里化功能使我们在编写函数时更加轻松。这意味着我们可以拥有这样简洁而富有表现力的代码:
_.flow(
_.assign(rows[0]),
_.omit('blah')
)(foundUser);
// >> {"charData":[],"ok": 1}
使用标准版的 Lodash,我们必须自己使用 _.partial 对这些函数进行 curry,代码肯定会看起来不那么简洁,但仍然可以这样做:
_.flow(
_.partialRight(_.assign, rows[0]),
_.partialRight(_.omit, 'blah')
)(foundUser);
// >> {"charData":[],"ok": 1}
使用流而不是链接的一大好处是,您可以轻松地将 Lodash 方法与您自己的自定义函数混合使用,因为 - 如上所述 -
他们所需要的只是作为输入的数据和作为输出的数据,没有别的:
const yourFunction = d => ({ ...d, yourProp: 4 });
_.flow(
_.assign(rows[0]),
yourFunction,
_.omit('blah')
)(foundUser);
// >> {"charData":[],"ok": 1, yourProp: 4}
这使得函数组合更容易、更灵活,并且可以说自然会导致更具表现力的代码。
还有一点需要注意。如果您只安装和导入您使用的 Lodash 方法,您将只需要添加 flow 包,而不是像链接一样添加整个 Lodash 库。
npm i --save lodash.flow
对比
npm i --save lodash
在许多实际应用程序中,这可能是一个微不足道的优势,在这些应用程序中,拥有完整的 Lodash 构建不是问题,并且可以说更容易保持最新状态,但如果您正在编写将要分发的库或脚本,则非常方便用作第三方工具。在这种情况下,就分布式大小而言,您将能够保持您的足迹更小。
Lodash 方法文档:
值得一看的文章:
还有几点需要注意:
例子:
_.flow(
_.assign(rows[0]), // #1st to execute
yourFunction, // #2
_.omit('blah'), // #3
)(foundUser);
// is the same as...
_.flowRight(
_.omit('blah'), // #3rd to execute
yourFunction, // #2
_.assign(rows[0]), // #1
)(foundUser);