пытаюсь удалить автомобиль 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
)
};



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Использовать Массив.прототип.фильтр()
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)
}
})
}
Это может быстро стать беспорядочным, если вы имеете дело с глубоко вложенными объектами, и это хорошая идея для постарайтесь нормализовать свое состояние в редуксе
Ах да, ты прав, сначала карта вида на машину, потом машина! Извините, я не увидел ваш второй комментарий
для меня это очень сложно, если вы бесплатно, пожалуйста, дайте мне решение, используя нормализованное, тогда я смогу научиться :)
Вышеприведенный ответ с использованием 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);
Я только что обновил массив карт, мой вопрос: все ли в порядке с фильтром?