根据Redux动作有效负载从数组中删除项目

时间:2018-07-15 18:15:49

标签: javascript ecmascript-6 redux

如果某个项目已经在数组中,我想将其删除,否则我想将其添加到数组中。我应该怎么做?我附上了不完整的代码:

import { SELECTED_ITEM } from '../actions/type'

const INITIAL_STATE = []

export default(state = INITIAL_STATE ,action) => {  
  switch(action.type) {
    case SELECTED_ITEM:  
        state.map(function(value) {
          if(value === action.payload) {
            ?????
          }
        })
        return [...state,action.payload]
    default : return state;
  }
}

我是否必须遍历所有值才能找到项目?以及如何返回已删除或已添加项目的新状态?

2 个答案:

答案 0 :(得分:1)

您可以进行Array#includes检查,然后根据需要进行过滤(假定原始值):

if(state.includes(value)) {
  return state.filter(value => value !== action.payload);
}
return [...state, action.payload];

答案 1 :(得分:0)

我使用lodash进行管理,这最适合数组迭代。对于使用普通循环或在某些情况下,我会发现一些问题。因此它不可靠。

var e = _.findIndex(state.itemList, function(o) { return o.UserID== action.payload.UserID; }); 

 if(e!==-1){
    state.itemList.splice(e, 1) 
    return { ...state, itemList: [...state.itemList] }
}