所以我有一个immutable.js事件对象集。
Set是Calendar
对象的属性:
const Calendar = new Record({
'events': new Set(), // set of Events
});
我正在使用Redux,并启动操作以添加和删除Calendar
中的事件:
将事件添加到日历中可以正常工作:
case ADD_EVENT_TO_CURRENT_CALENDAR:
return state.updateIn(['events'], (events)=> events.add({
start: action.event.date,
end: action.event.date,
title: `${action.event.show.venue}`,
show: action.event.show,
boundActions: action.boundActions,
}));
活动中的boundActions
之一是removeEventFromCurrentCalendar
操作。在当前事件上调用它会在reducer中触发以下内容:
case REMOVE_EVENT_FROM_CURRENT_CALENDAR:
return state.updateIn(['events'], (events)=> {
events.delete(action.event);
});
action.event
相当于ADD_EVENT...
中指定格式的当前事件,即:
{
start,
end,
title,
show,
boundActions,
}
但是,它不是完全相同的对象,这正是我猜测正在绊倒.delete()
调用。
使用immutable.js从此集合中删除此类似但不相同的对象的最佳方法是什么?
答案 0 :(得分:0)
您可以使用Array.prototype.filter
手动排除对象。
arr.filter((item) => {
return item.start !== toDelete.start &&
item.end !== toDelete.start && ...etc
})
FWIW,如果数组中的每个项目都保留唯一ID,则更容易过滤。然后,您只需要比较单个值而不是对象结构。
答案 1 :(得分:0)
我是否可以建议您将Record
更改为Map
,将Set
更改为List
,然后在使用新事件更新事件List
时,您可以在其中存储索引引用(这些也应该是Map
,尽管Record
也可能很好。)
稍后使用Immutable.List.delete
删除它会变得非常简单。