lodash的过滤功能是否具有上下文?

时间:2017-12-12 09:29:57

标签: javascript arrays function underscore.js lodash

我查看了lodash filter文档,并且不清楚第三个参数是否是上下文。

我正在使用cytoscape插件(dagre),似乎将this作为3参数传递。当我在调用过滤器方法之前暂停执行时,会定义this。但是在调用this内是未定义的。

我查看了underscore filter文档,似乎将第三个参数作为上下文。所以我有点猜测插件最初使用下划线然后可能改为lodash。我正在研究的项目是使用lodash。

我无法理解为什么this在我的能力点上为空。它可能是项目特定的,但我只想清楚lodash过滤器的第三个参数。

lodash过滤器的定义是否与下划线过滤器完全相同?从文档中看似不是这样。

2 个答案:

答案 0 :(得分:3)

您可以随时使用Function.prototype.bind定义自己的上下文。

_.filter([…], 
  function (o) {
    console.log(this.id); //100
    //than return something based on o
    return o.active
  }.bind({id: 100})
);

Doc on mdn

答案 1 :(得分:2)

不幸的是,与lodash filter method不同,underscore filter method并没有为context参数提供选项,因为它只需要两个参数:

  

<强>参数

     
      
  • collection(Array | Object):要迭代的集合。
  •   
  • [predicate = _。identity](Function):每次迭代调用的函数。
  •   

您可以使用.bind() method将回调函数绑定到所需的context对象,如下所示:

_.filter(array, callback.bind(context));

注意:

请注意,Javascript有自己的 Array#filter() method ,已经提供此选项。