2017-07-19 1 views
0

私はunderscore.jsを使用しています。私はselectedCharges配列のループをアンダースコアeach関数を使用してループしますが、ループ内のselectedCharges変数にアクセスすることはできません。underscore.js each functions

_.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(key、1); –

+0

コメントにコードを投稿しないでください。特に何の説明もなしではありません。 –

答えて

1

ループ内scope変化するので、この問題が発生し、あなたがbind機能を使用してthisであなたの機能を結合することによって、同じスコープを維持することができます。

バインド()メソッドが呼び出されたときに、新しい関数が呼び出されたときに提供される任意の先行 引数の指定された配列と、与えられた値に設定し、その このキーワードを有し、新たな機能を作成します。

コード例:

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

はまだエラーが発生します。定義されていない –

+0

の 'selectedCharges'プロパティを読み取ることができません。問題を解決しました。ありがとうございます! –

+0

しかし、別の問題が発生します。ループ内の変異アレイ。 –

-1

コレクション自体である第3引数を使用できます。ここで

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

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

}); 

例えば は、ドキュメントのリンクです:http://underscorejs.org/#each

0

今日ではほとんどが機能を強調するためにネイティブにサポートしていジャバスクリプト。 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 
});