Как использовать редюсер в вложенном массиве

пытаюсь удалить автомобиль id: 2 из моей базы данных mongodb. используя реакцию на редукцию, мой вопрос: как проверить идентификатор отправки, равный идентификатору автомобиля в редукторе?

кнопка<button onClick = {this.handleDeleteCar(carID : data.id)>delete</button>

журнал данных

carview:
       [ 
         { id: 5c7496f0def4602bf413ea9a,
            parentId: 5c7496f0def4602bf413ea97,
            car: [
                   {
                     id: 2,
                     name: bmw
                   },
                   {
                     id:3,
                     name: amg
                    }
                 ]
          }
        ]

редуктор

case carConstants.car_DELETE_REQUEST:
return {...state,items: state.items.map(car =>car.id === action.id
        ? { ...car, deleting: true }
        : car
    )
  };
Поведение ключевого слова "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
0
462
2

Ответы 2

Использовать Массив.прототип.фильтр()

return {
  ...state,
  items: state.items.filter((car) => car.id !== action.id)
}

Обновлено:

В вашем случае вы можете использовать Array.prototype.filter, вложенный в Array.prototype.map:

return {
  ...state,
  carView: state.carView.map((view) => {
    return {
      ...view,
      car: view.car.filter(({ id }) => id !== action.id)
    }
  })
}

Это может быстро стать беспорядочным, если вы имеете дело с глубоко вложенными объектами, и это хорошая идея для постарайтесь нормализовать свое состояние в редуксе

Я только что обновил массив карт, мой вопрос: все ли в порядке с фильтром?

vladmir jk 26.02.2019 15:39

Ах да, ты прав, сначала карта вида на машину, потом машина! Извините, я не увидел ваш второй комментарий

Saraband 26.02.2019 15:55

для меня это очень сложно, если вы бесплатно, пожалуйста, дайте мне решение, используя нормализованное, тогда я смогу научиться :)

vladmir jk 26.02.2019 16:34

Вышеприведенный ответ с использованием Array.filter является хорошим, но если это не соответствует вашему варианту использования, вы можете использовать вложенную проверку findIndex.

let state = [ 
     { id: "5c7496f0def4602bf413ea9a",
        parentId: "5c7496f0def4602bf413ea97",
        car: [
               {
                 id: 4,
                 name: "bmw"
               },
               {
                 id:5,
                 name: "amg"
                }
             ]
      },
     { id: "5c7496f0def4602bf413ea9a",
        parentId: "5c7496f0def4602bf413ea97",
        car: [
               {
                 id: 2,
                 name: "bmw"
               },
               {
                 id:3,
                 name: "amg"
                }
             ]
      }
    ];

const action = { type: 'example', id: 2 }

const index = state.findIndex(({car}) => car.findIndex(({id}) => id === action.id) !== -1);

if (index === -1) {
  // you would probably return current state here realistically
  throw new Error('no index');
}
console.info(index);
state = [ ...state.slice(0, index), ...state.slice(index + 1)];
console.info(state);

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