Javascript 基于Redux操作负载从阵列中删除项

Javascript 基于Redux操作负载从阵列中删除项,javascript,ecmascript-6,redux,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(

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

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;
  }
}
我是否必须遍历所有值才能找到该项?如何使用已删除或已添加的项返回新状态?

您可以执行Arrayincludes检查,然后根据需要进行筛选,假设原始值:

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

我设法使用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] }
}

@AnkitJayaprakash很乐意帮忙。是在ES2016中引入的,所以它相当古老,但对于indexOf来说是一个很好的快捷方式。如何对和对象数组使用Include或类似的函数。您对此有什么解决办法吗。@AnkitJayaprakash您可以使用Arrayfind。然后只需检查返回值是否未定义。state.myList.find value=>value.TableID==action.payload;在这里,它总是返回未定义的值,即使它有值,我已经完成了调试,但是对于它的值,它显示了意外的结束input@AnkitJayaprakash很抱歉没有回答,但如果你有一个特别的问题,我建议你问一个新问题,在那里你可以提供更多的信息和背景,而不仅仅是一个评论。改变状态是不好的。你不应该把原件拼接起来。你应该用切片复制它。此外,您还可以使用ArrayFindEx在纯JavaScript中执行完全相同的操作。