underscore.js每个函数

时间:2017-07-19 10:57:24

标签: javascript underscore.js

我正在使用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  
    }
});

3 个答案:

答案 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