使用下划线将函数注入链的方法

Way to inject function into chain with underscore

我正在寻找一种方法来获取下划线链的内容并将其传递给函数,在这种情况下,链从文件中解析出时间戳并按时间戳对数组进行排序,获取最新的然后我想用 path.format 简单地重新组合路径。有没有办法用我忽略的下划线来做到这一点?

  return _.chain(dirFiles)
    .filter(function(dirFile){
      return dirFile.match(file.name)
    })
    .map(function(dirFile){
      dirFile = path.parse(dirFile)
      dirFile.timestamp = dirFile.name.split("-")[file.timestampPosition]
      return dirFile
    })
    .sortBy("timestamp")
    .last()
    .inject(path.format)
    .value()

_.mixin

Underscore 提供了一个选项,供您创建自己的映射函数,以您自己的方式将一个对象或任何类型的数据映射到另一个对象或任何类型的数据。

你只需要定义你自己的函数

下面只是一个示例,说明如何使用 mixin

定义您的函数
_.mixin({
    pathFormat: function(val,interceptor){ 
       // Just an example of how you can pass in your own interceptor
       return interceptor(val) + path.resolve(val); 
    }
});

然后像这样在链中提取你自己的函数:

_.chain(dirFiles)
   ...
   ...
   sortBy("timestamp")
   .last()
   .pathFormat(path.format)
   .value()

有了这个,pah.format 是一个拦截器函数,你传递给你定义的pathFormat 函数。因此,您可以处理 last() 返回的对象并将其映射到另一个结果对象,returns 它返回到后续的链接函数。

不,没有。然而,lodash 确实提供了一个 _.thru 方法,因为 v3:

_.thru(value, interceptor, [thisArg])

This method is like _.tap except that it returns the result of interceptor.

你当然可以_.mixin它变成下划线:-)