さて、最初に、私はあなたの質問に少し混乱しています。タイトルには「null許容」パラメーターの処理について書かれていますが、コードは「特殊なケース」パラメーター(具体的には「すべて」)を処理しているように見えます...トレーナーがnullの場合を除いて、私はそうは思いませんバックボーンコレクションを反復処理する場合でも可能です。
**編集**
OPが質問を更新したため、上記は関係ありなくなりました。それに応じて回答も更新しました。
いずれにせよ、あなたのコードには何も悪いことや異常なことは何もありません。三項演算子は、1回限りの特殊なケースを処理する標準的な方法です。ただし、別のアイデアを探している場合は、追加の関数を使用してコードをドライアウト(重複を排除)するものを次に示します。
function matchesOrAll(expected, actual) {
return expected === null || expected === actual;
}
getFiltered: function (status, city) {
return this.filter(function (trainer) {
return matchesOrAll(status, trainer.get("TrainerStatusName") &&
matchesOrAll(city, trainer.get("City"));
}
* * 編集 * *
「すべて」ではなくnullについて話しているので、null/undefinedのより単純なケースにはより良いパターンがあることを指摘する価値があります。たとえば、都市をフィルタリングするだけの場合、コードは次のようになります。
getFiltered: function (expectedCity) {
return this.filter(function (currentCity) {
return expectedCity === (currentCity || expectedCity);
}
言い換えると、Javascriptの「真実性」と、論理和(つまり||
)ブール式が最初の真実性の値を返すという事実を利用できます。これにより、3値の必要がなくなり、多くのライブラリはこのパターンを使用して、提供されていない引数を入力します。たとえば、何も提供されていない場合に「target」引数を新しいオブジェクトに設定するjQueryの行を次に示します。
target = arguments[1] || {};
ただし、残念ながら、trainer.get('foo')
オブジェクトだけでなく、物事のプロパティ/属性(例)を直接処理する場合(例trainer
)、(関数を作成する以外に)使用できる適切なショートカットはありません。