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

时间:2015-06-16 15:57:17

标签: javascript underscore.js chaining

我正在寻找一种方法来获取下划线链的内容并将其传递给一个函数,在这种情况下,链从文件中解析出时间戳并按时间戳对数组进行排序,得到最新的一个然后我我想简单地用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()

2 个答案:

答案 0 :(得分:0)

<强> _。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()返回的对象并将其映射到另一个结果对象,并将其返回到后续的链接函数。

答案 1 :(得分:0)

不,没有。但是,从v3开始,lodash确实提供了_.thru方法:

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

此方法与_.tap类似,只是它返回拦截器的结果。

您肯定可以_.mixin将其加入下划线: - )