私は多くの州を持つ注文還元剤を持っています。どのように反応の状態の配列をフィルタリングできますか?
const initialState = {
channel: null,
order: {},
fetching:true,
menu: [],
categories: [],
subcategories: [],
currentCategoryId: 1,
currentSubcategoryId: 5,
currentMenu: [],
};
フィルタしたいものはmenu
です。 menu
は、menu_item
のオブジェクトを持つ状態の配列です。currentCategoryId
とcurrentSubcategoryId
です。私がこれらの状態でしたいのは、currentCategoryId
とcurrentSubcategoryId
をフィルタリングしてmenu
をフィルタリングし、フィルタリングした状態をcurrentMenu
にすることです。
case Constants.ORDER_CHANNEL_CONNECTED:
return
{...state,currentMenu: action.menu.map((menu) => {
if(state.currentCategoryId == menu.category_id){
return menu;
}
else return false;}}
そうするために、上記のようなコードを作成しました。いくつかのフィルタリングされた値を返すにもかかわらず、多くのfalse値を持つ同じ数の配列を示します。私はそれを行うための他のアプローチを探したいです。
どうすればいいですか?
ありがとうございます。
{...state,currentMenu: action.menu.filter((menu) =>
state.currentCategoryId == menu.category_id)}
P.S:
についての詳細をチェックアウトすることができます?任意の利点は単に 'filter'関数を使用することと比較しますか? –
不変を使用する主な理由は、オブジェクト全体の高価な複製を避けるためです。変更不可能なオブジェクトは、以前のバージョンとの差分のみを格納します。大きな状態のオブジェクトを持つ大規模なプロジェクトでは、特に高速に動作します。利点についての詳細を読むことができます[ここ](http://stackoverflow.com/questions/39227832/advantages-of-using-immutable-js-over-object-assign-or-spread-operators) –