如何在redux状态下从另一个数组中删除数组

时间:2020-07-13 07:48:39

标签: javascript reactjs redux

我有以下数据:

removed_users = [1]

userProfile = [{id:1 , user:{id:1,username:test}} ,
               {id:2 , user:{id:2,username:test2}} ,]

我想做什么: 我希望能够基于数组removed_users从userProfile中删除正确的对象。我在下面尝试了以下代码,但未将其从数组中删除

state.project['userProfile'].filter(function(user) {
                                                    return !action.payload.find(function(removed) {
                                                            return removed === user.user.id
                                                                    })
                                                                })}

这是化简器的代码,可以帮助我从状态中删除removed_users

        case 'user_remove': return (updateObject(state, {
        project: {...state.project , ['users']:  state.project['userProfile'].filter(function(user) {
                                                                    return !action.payload.find(function(removed) {
                                                                    return removed === user.user.id
                                                                    })
                                                                })}
    }))

这是updateObject辅助函数的脚本:

export const updateObject = (oldObject, updatedProperties) => {
return {
    ...oldObject,
    ...updatedProperties
}

}

3 个答案:

答案 0 :(得分:1)

过滤器有误。使用这样的表达式:

userProfile.filter((user)=>!removed_users.includes(user.id))

在操场上查看完整示例:https://jscomplete.com/playground/s534466

答案 1 :(得分:0)

尝试删除用户:

const userProfile = [
  {id:1 , user:{id:1,username:"t1"}} ,
               {id:2 , user:{id:2,username:"t2"}}]

const arr= [1];
const filtered = userProfile.filter(({user})=> !arr.includes(user.id)); 
console.log(filtered)

答案 2 :(得分:0)

步骤:

  1. 发送操作以按用户ID删除用户。
function removeUser(id){
   return {
     type: "REMOVE_USER",
     payload: id
   }
}
dispatch(removeUser(1))
  1. 在减速器中过滤用户ID与接收到的ID不相等的用户。然后将新的过滤用户设置为不包含已删除用户的状态。
function reducer(state, action){
   switch(action.type){
     case "REMOVE_USER":
        return {
          ...state,
          users: state.users.filter(user => user.id !== action.payload),
        }
     // other cases
   }
}

祝你好运。