在lodash减少后继续链

cor*_*vid 3 javascript underscore.js lodash

我想做如下的事情

_(data)
  .map(() => /** ... */)
  .reduce(function (modifier, doc) {
    modifier.$set = modifier.$set || {};
    modifier.$set.names = doc.names;
    return modifier;
  }, {})
  .map(() => /** ... */)
  .flatten()
Run Code Online (Sandbox Code Playgroud)

然而,似乎在减少后,链断裂.

有没有办法从reduce返回的值继续链?

Mik*_*ant 6

reduce() 方法不能保证生成其他方法可以操作的集合(数组,对象或字符串),因此默认情况下它可以是可链接的.

从关于lodash object(_)的lodash文档:

操作和返回数组,集合和函数的方法可以链接在一起.检索单个值或可能返回原始值的方法将自动结束返回未包装值的链.

_文档

但是,您可以使用明确强制链接_.chain().这将允许在lodash包装器中显式返回单个值和基元以继续链接.

因此对于您的代码可能如下所示:

_.chain(data)
  .map(() => /** ... */)
  .reduce(function (modifier, doc) {
    modifier.$set = modifier.$set || {};
    modifier.$set.names = doc.names;
    return modifier;
  }, {})
  .map(() => /** ... */)
  .flatten()
Run Code Online (Sandbox Code Playgroud)

_.chain()文档