2017-07-19 69 views
0

我正在使用underscore.js。我使用下劃線each函數循環訪問selectedCharges數組,但我無法訪問循環內的selectedCharges變量。underscore.js每個函數

_.each(this.selectedCharges, function(selectedCharge, key){ 
    if(selectedCharge._id == charge._id){ 
     this.selectedCharges.splice(key,1); // get error from this line 
    } 
}); 
+0

刪除這一點。在if中。這是你目前正在迭代的對象 –

+0

這樣嗎? selectedCharges.splice(鍵,1); –

+0

不要在評論中發佈代碼。特別是沒有任何解釋。 –

回答

1

這是因爲內循環scope變化,您可以通過使用bind功能與this結合的功能保持相同的範圍。

的bind()方法創建一個新的功能,調用它時,有其 這個關鍵字設置爲所提供的值,與前述的當新功能被調用任何提供 參數給定的序列。

代碼示例:

_.each(this.selectedCharges, function(selectedCharge, key){ 
    if(selectedCharge._id == charge._id){ 
     this.selectedCharges.splice(key,1); 
    } 
}.bind(this)); 
+0

仍然出現錯誤。無法讀取undefined –

+0

屬性'selectedCharges'它解決了問題,謝謝! –

+0

但隨後出現另一個問題。在循環中改變數組。 –

-1

您可以使用集合本身的第三個參數。 例如

_.each(this.selectedCharges, function(selectedCharge, key, coll){ 

    if(selectedCharge._id == charge._id){ 
     coll.splice(key,1); 
    } 

}); 

這裏是文檔鏈接:http://underscorejs.org/#each

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 
});