Удалить значение из массива, вложенного в объект, также вложенный в массив

У меня проблема с моим кодом. В настоящее время у меня есть некоторые данные, подобные приведенным ниже;

 users: [
    {
      name: 'bolu',
      features: ['Tall'],
    },
    {
      name: 'cam',
      features: ['Bearded', 'Short'],
    },
  ],
};

То, что я пытаюсь сделать, это удалить/удалить одну функцию, например, если я передам «коротко» в свое действие с сокращением. Я бы хотел, чтобы он («Краткий» текст) был удален из массива функций. В настоящее время у меня настроено действие redux следующим образом:

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;
        },
       },
   });

Итак, здесь я передаю значение (action.payload — это передаваемое значение). Когда это действие отправлено, я хочу удалить только переданное слово из массива функций. Я надеюсь, что теперь это более ясно.

Это не работает по какой-то причине, и я не могу понять, почему. Любая помощь будет оценена, пожалуйста, спасибо.

Ваш код на самом деле не отражает ваше состояние. Что такое state.traits? Где собственность пользователя values? Вы пытаетесь удалить всего пользователя, если в массиве features встречается слово «Short» или только это слово? Кроме того, это не действие. Это редуктор, и он должен возвращать состояние из функции.

Andy 16.03.2022 20:28

Привет, @Andy, только что отредактировал. Дайте мне знать, если это все еще не ясно.

Ire 16.03.2022 20:38

Что в action.payload и removeUsers? Можете выложить console.info или отладчик?

Dmitriy Zhiganov 16.03.2022 21:01

Спасибо @Энди! ?

Ire 16.03.2022 21:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Ваш код не соответствует вашей структуре состояния. Замените traits на users, а values на features.

  2. Похоже, это часть редуктора, а не действия (это объект, а не функция).

  3. Вы должны возвращать новое состояние из редуктора.

  4. Учитывая ваше обновление, функция должна называться removeFeature.

Итак, я исправил несколько фрагментов вашего кода на основе того, что я помню из Redux. Примечание: надуманный пример.

// State
const state = {users:[{name:"joe",features:["Mean","Short"]},{name:"bolu",features:["Tall"]},{name:"cam",features:["Bearded","Short"]}]};

// The reducer accepts a state, and an action
function reducer(state, action) {

  // We destructure the type, and payload, from the action object
  const { type, payload } = action;

  // Depending on the type...
  switch (type) {

    case 'removeFeature': {
      
      // `map` over the users (we return a new state array)
      return state.users.map(user => {
        
        // `filter` out the feature elements
        // that match the payload
        const updatedFeatures = user.features.filter(feature => {
          return feature !== payload;
        });
        
        // Return a new updated object
        return { ...user, features: updatedFeatures };
      
      });
    
    }

    default: return state;

  }

}

const updatedState = reducer(state, {
  type: 'removeFeature',
  payload: 'Short'
});

console.info(updatedState);

Другие вопросы по теме