我查看了lodash filter文档,并且不清楚第三个参数是否是上下文。
我正在使用cytoscape插件(dagre),似乎将this
作为3参数传递。当我在调用过滤器方法之前暂停执行时,会定义this
。但是在调用this
内是未定义的。
我查看了underscore filter文档,似乎将第三个参数作为上下文。所以我有点猜测插件最初使用下划线然后可能改为lodash。我正在研究的项目是使用lodash。
我无法理解为什么this
在我的能力点上为空。它可能是项目特定的,但我只想清楚lodash过滤器的第三个参数。
lodash过滤器的定义是否与下划线过滤器完全相同?从文档中看似不是这样。
答案 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})
);
答案 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 ,已经提供此选项。