簡體   English   中英

underscore.js每個函數

[英]underscore.js each function

我正在使用underscore.js。 我使用下划線在each函數中遍歷selectedCharges數組,但無法在循環內訪問selectedCharges變量。

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

發生這種情況是因為作用域在循環內發生了變化,您可以通過使用bind函數將函數與this功能綁定來保持相同的作用域。

bind()方法創建一個新函數,該函數在被調用時將其關鍵字設置為提供的值,並在調用新函數時提供給定的參數序列。

代碼示例:

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

如今,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
});

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

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

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

});

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM