[英]immutable.js: remove an item in a set
所以我有一个immutable.js事件对象集。
Set是Calendar
对象的属性:
const Calendar = new Record({
'events': new Set(), // set of Events
});
我正在使用Redux,并触发要添加和删除Calendar
中事件的操作:
如果将事件传递到适当的对象中,并根据我的reducer中的对象构造该对象,则将事件添加到日历的效果很好:
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从此集合中删除此相似但不相同的对象的最佳方法是什么?
您可以使用Array.prototype.filter
手动排除对象。
arr.filter((item) => {
return item.start !== toDelete.start &&
item.end !== toDelete.start && ...etc
})
FWIW,如果数组中的每个项目都保留唯一的ID,则过滤起来会更容易。 然后,您只需要比较一个值,而不是对象结构。
我可以建议您将Record
更改为Map
,将Set
更改为List
,然后在使用新事件更新事件List
,可以在其中存储索引引用(尽管Record
也可能还不错,但它们也应该是Map
)。
然后稍后使用Immutable.List.delete
删除它变得很简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.