我有订单减速机,它有很多州。
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;}}
为此,我做了上面的代码。即使它返回一些过滤值,它也会显示具有许多错误值的相同数量的数组。我想找到其他方法来做到这一点..
我该怎么做?
提前致谢。
答案 0 :(得分:5)
请使用filter
功能:
{...state,currentMenu: action.menu.filter((menu) =>
state.currentCategoryId == menu.category_id)}
P.S:我同意以下答案,最好使用Immutable.js
答案 1 :(得分:2)
我想说你可以为此目的使用immutable.js。您可以将filter
添加到地图中。
您可以尝试类似
的内容Immutable.map(state.menu).filter(state.currentCategoryId===menu.category_id)
P.S:我已经测试了上面的代码,但它应该稍作修改。
您可以查看有关不可变here
的更多信息答案 2 :(得分:1)
onTodoClick(id){
this.setState({items: this.state.items.filter(item => item.news_id == id )
});
}
答案 3 :(得分:0)
如果要按ID进行过滤,并且它是数字,请注意比较字符串和数字。我不得不使用parseInt(如下所示)。
Arr.filter(single => parseInt(single.id) !== parseInt(id))
如果JavaScript过滤器数组不起作用,请考虑一下