У меня есть состояние Redux со следующей структурой:
const initialState = {
data: [
'device_groups': [
{
'id': '1', 'name': 'group 1',
'devices': [
{'id': 11, 'name': 'device 11', 'active': 1},
{'id': 12, 'name': 'device 12', 'active': 1},
{'id': 13, 'name': 'device 13', 'active': 1}
]},
{
'id': '2', 'name': 'group 2',
'devices': [
{'id': 21, 'name': 'device 21', 'active': 1},
{'id': 22, 'name': 'device 22', 'active': 0}
]}
],
selectedDevices: [
{'id': 11, 'name': 'device 11', 'active': 1},
{'id': 12, 'name': 'device 12', 'active': 1},
{'id': 21, 'name': 'device 21', 'active': 1},
{'id': 13, 'name': 'device 13', 'active': 1}
]
};
В моем компоненте, когда я щелкаю по группе, я хочу удалить все объекты с тем же идентификатором, что и объекты в выбранной группе измассив selectedDevices
.В этом случае объекты с идентификаторами 11, 12, 13.
Я пытался сделать это несколькими способами, но, кажется, я всегда остаюсь с одним и тем же массивом.Например, я попробовал это:
const handleClickedGroup = (state, action) => {
const updatedDevices = [...state.data.device_groups[action.groupIndex].devices].slice();
let updatedSelectedDevices = [...state.selectedDevices].slice();
let newSelDevices = [];
for (let i in updatedDevices) {
const selectedDeviceIndex = findObjectIndex(updatedSelectedDevices, updatedDevices[i], 'id');
newSelDevices = [
...updatedSelectedDevices.slice(0, selectedDeviceIndex),
...updatedSelectedDevices.slice(selectedDeviceIndex + 1)
];
}
return updateObject(state, {selectedDevices: newSelDevices});
}
Я попробовал еще несколько вещей, но у меня ничего не получалось.Возможно ли это сделать?
ОБНОВЛЕНИЕ
Я думаю, что нашел решение:
const updatedDevices = [...state.data.device_groups[action.groupIndex].devices].slice();
let updatedSelectedDevices = [...state.selectedDevices].slice();
return updateObject(state, {selectedDevices: updatedSelectedDevices.filter(i => !updatedDevices.some(j => j.id === i.id))});
Однако я не уверен, что я 'Я делаю это неизменно.Может кто-нибудь подтвердить это?