Tengo un problema con mi código. Actualmente tengo algunos datos como el siguiente;
users: [ { name: 'bolu', features: ['Tall'], }, { name: 'cam', features: ['Bearded', 'Short'], }, ], };
Lo que estoy tratando de hacer es eliminar/eliminar una sola característica, por ejemplo, si paso 'breve' en mi acción redux. Me gustaría que (el texto 'Corto') se elimine de la matriz de características. Actualmente tengo mi acción redux configurada de esta manera:
export interface UsersDataState { name: string, features: Array<string>, } export interface UsersState { users: UsersDataState[]; } const initialState: UsersState = { users: [], }; export const usersSlice = createSlice({ name: 'users', initialState, reducers: { removeUser: (state, action: PayloadAction<string>) => { const removedUsers = state.users.filter((user) => user.features.indexOf(action.payload)); state.users = removedUsers; }, }, });
Así que aquí estoy pasando el valor en ( action.payload
es el valor que se pasa). Cuando se envía esta acción, quiero eliminar solo la palabra que se pasa de la matriz de características. Espero que esto sea más claro ahora.
Esto no funciona por alguna razón y no puedo entender por qué. Cualquier ayuda sería apreciada por favor, gracias.
Debe copiar los objetos en users
y filtrar en las features
.
Aquí un ejemplo:
var users = [{ name: 'bolu', features: ['Tall'], }, { name: 'cam', features: ['Bearded', 'Short'], }]; const payload = "Short"; const newUsers = users.map(user => ({ ...user, features: user.features.filter(f => f != payload) })); console.log(newUsers);
Actualmente está filtrando la matriz de users
, pero debería filtrar la matriz de features
anidadas.
Prueba esto
const removedUsers = state.users.map(user => { return {...user, features: user.features.filter(feature => feature !== action.payload)}; })