React.jsアプリのフィルター機能をコーディングしているときに、以下の問題に直面しました。
3つの異なるタイプのフィルター(日付、キャンパス、都市)があるため、ユーザーが入力したフィルターのみに基づいてオブジェクトの配列をユーザーに返す必要があります(1つ、2つ、または3つのみ)。 。この問題を解決するために、私はこの解決策を思いつきました:
// Example of user input, something how my state variables should look
const date = null
const campus = "Example 1"
const city = "City 1"
//
const array = [ { date: "2020-11-23", campus: "Example 1", city: "City 1" },
{ date: "2020-11-24", campus: "Example 2", city: "City 2" }, ]
const filteredArray = array.filter(e => {
if (date && campus && city)
return e.date === date && e.campus === campus && e.city === city;
if (date && campus)
return e.date === date && e.campus === campus;
if (campus && city)
return e.campus === campus && e.city === city;
if (date && city)
return e.date === date && e.city === city;
if (date)
return e.date === date;
if (campus)
return e.campus === campus;
if (city)
return e.city === city;
});
さて、フィルタリングされたオブジェクトを返すときにnull値を破棄して、コードのサイズを減らすことができる他の方法はありますか?
回答 2 件
これを行うためのより良い方法は、フィルターを個別におよび直列に実行することです。
何かのようなもの:
function filter(array, date, campus, city) { let filteredByDate = filterBy(array, date, 'date') let filteredByCampus = filterBy(filteredByDate, campus, 'campus') let filteredByCity = filterBy(filteredByCampus, city, 'city') return filteredByCity }
その場合、個々のフィルターは次のようになります。
function filterBy(array, data, prop) { if(!date) return array else return array.filter(e => (e[prop] === data)) }
関連記事
- Pythonで条件付きのデータの値を変更するにはどうすればよいですか?
- 配列内のオブジェクト内のフィールドに基づいてすべての値を合計するMongodbAggregateクエリ
- 2つのJavaScript関数を条件付きの3番目の関数とマージする方法は?
- 値の1つが条件を満たすすべての行を削除するにはどうすればよいですか? apply()が機能しない
- Javascriptは、条件を一致させることにより、アイテムの出現を削除します
- Javascriptの条件で最大
- JavaScriptコンストラクター関数は値を未定義として返します
- ng2-chart:グラフ内にパーセンテージ値を表示するにはどうすればよいですか?
- 正規表現、中括弧内の値を一致させる
- リスト内包内の条件で「または」を使用できますか?
関連した質問
- オブジェクト内の複数のURLをフェッチ反応
- Reactで並べ替えとスライスを試みるときにgeojson全体を保持するにはどうすればよいですか?
- 実行できません。 JavaScript/Reactの配列にマップ
- JS(ES6)のオブジェクト内にある配列から要素を削除する方法
- ReactJS:デバッグに役立ちますか?各配列NOT列の合計
- React Hook、Axiosのさまざまな呼び出しからのオブジェクトの配列
- 単一の関数でネストされた状態の値を変更しますか? (javascript/React)
- オブジェクトの値を変更する
- array [somenumber]と入力せずに、配列内にある特定のオブジェクトを取得する方法はありますか?
- Reactjs無限スクロールコンポーネントは常に新しいデータをレンダリングします
それらを1つのステートメントに組み合わせることができます。
また、すべてのプロパティを再度書き換えることなく、すべての条件を動的にチェックするオブジェクトを作成できます。