我正在使用underscore.js。我使用下划线selectedCharges
函数遍历each
数组,但我无法访问循环内的selectedCharges
变量。
_.each(this.selectedCharges, function(selectedCharge, key){
if(selectedCharge._id == charge._id){
this.selectedCharges.splice(key,1); // get error from this line
}
});
答案 0 :(得分:1)
这是因为循环内的scope更改,您可以使用bind函数将函数与this
绑定,从而保持相同的范围。
bind()方法创建一个新函数,当被调用时,它具有它 此关键字设置为提供的值,具有给定的序列 调用新函数时提供的任何参数。
代码示例:
_.each(this.selectedCharges, function(selectedCharge, key){
if(selectedCharge._id == charge._id){
this.selectedCharges.splice(key,1);
}
}.bind(this));
答案 1 :(得分:0)
现在javascript对大多数下划线功能都有本机支持。请参阅https://www.reindex.io/blog/you-might-not-need-underscore/。
下划线答案是:
var filteredCharges = _.filter(this.selectedCharges, function(selectedCharge){
return selectedCharge._id !== charge._id;
});
本机答案是:
const filteredCharges = this.selectedCharges.filter(selectedCharge => {
return selectedCharge._id !== charge._id
});
答案 2 :(得分:-1)
您可以使用第三个参数,即集合本身。 例如
_.each(this.selectedCharges, function(selectedCharge, key, coll){
if(selectedCharge._id == charge._id){
coll.splice(key,1);
}
});
以下是文档链接:http://underscorejs.org/#each