Как удалить массив из другого массива в состоянии редукции javascript - PullRequest
2 голосов
/ 13 июля 2020

У меня есть следующие данные:

removed_users = [1]

И

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

Что мне делать sh: Я sh, чтобы иметь возможность удалять правильные объекты из userProfile на основе массива removed_users. Я пробовал следующий код ниже, но не удалял его из массива

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 ]

1 голос
/ 13 июля 2020

У вас ошибка в фильтре. Используйте такое выражение:

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

См. Полный пример на игровой площадке: https://jscomplete.com/playground/s534466

0 голосов
/ 13 июля 2020

Шаги:

  1. Отправка действия по удалению пользователя по его id.
function removeUser(id){
   return {
     type: "REMOVE_USER",
     payload: id
   }
}
dispatch(removeUser(1))
Отфильтруйте пользователей в редукторе, что идентификатор пользователя не равен полученному идентификатору. А затем установите новых отфильтрованных пользователей в состояние, которое не включает удаленных пользователей.
function reducer(state, action){
   switch(action.type){
     case "REMOVE_USER":
        return {
          ...state,
          users: state.users.filter(user => user.id !== action.payload),
        }
     // other cases
   }
}

Удачи.

0 голосов
/ 13 июля 2020

Попробуйте удалить пользователя:

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)
...