不可变.js:删除集中的项目
immutable.js: remove an item in a set
所以我有一组不可变的.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
操作。 在当前事件上调用它会在化简器中触发以下内容:
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()
调用。
使用不可变.js从此集合中删除此相似但不相同的对象的最佳方法是什么?
您可以使用
Array.prototype.filter
手动排除对象。
arr.filter((item) => {
return item.start !== toDelete.start &&
item.end !== toDelete.start && ...etc
})
FWIW,如果数组中的每个项目都保留唯一的 ID,则更容易过滤。然后,您只需要比较单个值而不是对象结构。
我是否可以建议您将Record
更改为Map
并将Set
更改为List
,然后在使用新事件更新事件List
时,您可以在其中存储索引引用(这些也应该Map
尽管Record
也可能很好)。
然后使用Immutable.List.delete
将其删除变得非常简单。
相关文章:
- 正在将数据主题添加到所有项目
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 在jstree中,如何将指定的节点集中到大型树上
- 如何检查管道中未定义的项目
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 学生搜索项目jquery/javascript
- 如何获取不属于我项目的上一页的URL
- Dojo:访问dijit.form.Select中单击的项目
- 角度的项目列表 ng 重复,ng 单击显示全宽描述
- 我需要为我的朋友在这个项目上提供帮助
- 如何从 HTML 查询中删除项目
- 在Meteor项目中安装并包含npm模块后出错
- 当在Ember中点击一个项目时,我如何将一个活动类添加到项目列表中
- 将单击事件添加到附加的项目中
- 通过另一个php应用程序将我的项目推送到Github存储库中
- 在javascript中搜索项目列表的性能
- 如何将本地依赖项添加到npm项目中
- angularjs移除焦点上的活动类并添加到下一个项目
- 不可变.js:删除集中的项目
- 点击修改vis.js数据集中的项目内容