在 _.filter 中访问 this.var?
access to this.var in _.filter?
我有一个变量 this.myvar
,它是一个数组。我想用这个变量创建一个 _.filter()
,但是在 _.filter()
函数中我的 this.myvar
是未知的。
有没有办法解决这个问题,还是我完全误解了什么?
this.my_array = ['aaa', 'bbb', 'ccc', 'ddd'];
this.my_filter = ['aaa', 'ccc'];
my_filtered_object = _.filter(this.my_array, function(item) {
alert(this.my_filter.toSource());
/*
if(this.my_filter.indexOf(item) != -1) {
return item;
}
*/
});
警报应显示 this.my_filter
的值,但似乎 _.filter()
内无法访问该变量
有多种解决方案。
将引用存储在单独的变量中:
var my_filter = this.my_filter;
my_filtered_object = _.filter(this.my_array, function(item) {
alert(my_filter.toSource());
});
设置_.filter()
内的上下文(this
)指向函数外的this
:
my_filtered_object = _.filter(this.my_array, function(item) {
alert(this.my_filter.toSource());
}, this);
使用 arrow function expression(尽管这可能不适用于所有浏览器):
my_filtered_object = _.filter(this.my_array, item => {
alert(this.my_filter.toSource());
});
使用 _.bind()
,正如马里奥在他的回答中所建议的那样。
解决方案 #2 对我来说最有意义。
如果您想访问 [=24],您传递给 _.filter() 的匿名函数需要绑定到您的上下文=].
使用下划线你只需要改变你的代码如下:
my_filtered_object = _.filter(this.my_array, _.bind(function(item) {
alert(this.my_filter.toSource());
/*
if(this.my_filter.indexOf(item) != -1) {
return item;
}
*/
}, this));
如您所见,我添加了 _.bind() 方法,将您需要的上下文附加到匿名函数。
我有一个变量 this.myvar
,它是一个数组。我想用这个变量创建一个 _.filter()
,但是在 _.filter()
函数中我的 this.myvar
是未知的。
有没有办法解决这个问题,还是我完全误解了什么?
this.my_array = ['aaa', 'bbb', 'ccc', 'ddd'];
this.my_filter = ['aaa', 'ccc'];
my_filtered_object = _.filter(this.my_array, function(item) {
alert(this.my_filter.toSource());
/*
if(this.my_filter.indexOf(item) != -1) {
return item;
}
*/
});
警报应显示 this.my_filter
的值,但似乎 _.filter()
内无法访问该变量
有多种解决方案。
将引用存储在单独的变量中:
var my_filter = this.my_filter; my_filtered_object = _.filter(this.my_array, function(item) { alert(my_filter.toSource()); });
设置
_.filter()
内的上下文(this
)指向函数外的this
:my_filtered_object = _.filter(this.my_array, function(item) { alert(this.my_filter.toSource()); }, this);
使用 arrow function expression(尽管这可能不适用于所有浏览器):
my_filtered_object = _.filter(this.my_array, item => { alert(this.my_filter.toSource()); });
使用
_.bind()
,正如马里奥在他的回答中所建议的那样。
解决方案 #2 对我来说最有意义。
如果您想访问 [=24],您传递给 _.filter() 的匿名函数需要绑定到您的上下文=].
使用下划线你只需要改变你的代码如下:
my_filtered_object = _.filter(this.my_array, _.bind(function(item) {
alert(this.my_filter.toSource());
/*
if(this.my_filter.indexOf(item) != -1) {
return item;
}
*/
}, this));
如您所见,我添加了 _.bind() 方法,将您需要的上下文附加到匿名函数。