如何过滤反应中的状态数组?

时间:2017-01-16 11:11:44

标签: reactjs filter redux

我有订单减速机,它有很多州。

const initialState = {
 channel: null,
 order: {},
 fetching:true,
 menu: [],
 categories: [],
 subcategories: [],
 currentCategoryId: 1,
 currentSubcategoryId: 5,
 currentMenu: [],
};

我想要过滤的是menumenu是一个状态数组,其对象为menu_item我有currentCategoryIdcurrentSubcategoryId。我想对这些状态做的是,使用currentCategoryIdcurrentSubcategoryId过滤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;}}

为此,我做了上面的代码。即使它返回一些过滤值,它也会显示具有许多错误值的相同数量的数组。我想找到其他方法来做到这一点..

我该怎么做?

提前致谢。

4 个答案:

答案 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过滤器数组不起作用,请考虑一下