我有兩個循環,一個爲每個月的一天,其他與本月的所有事件。假設我有100 000個事件。 我正在尋找一種方法,在主要事件List
「一旦消耗」時刪除事件。immutable.js過濾器和mutate(刪除)找到的條目
的代碼是一樣的東西:
const calendarRange = [{initialDate}, {initialDate}, {initialDate}, {initialDate}, ...] // say we have 30 dates, one for each day
const events = fromJS([{initialDate}, {initialDate}, {initialDate}, ...]) // let's say we have 100 000
calendarRange.map((day) => {
const dayEvents = events.filter((event) => day.get('initialDate').isSame(event.get('initialDate'), 'day')) // we get all events for each day
doSomeThingWithDays(dayEvents)
// how could I subtract `dayEvents` from `events` in a way
// the next celandarRange iteration we have less events to filter?
// the order of the first loop must be preserved (because it's from day 1 to day 3{01}])
}
隨着lodash我可以這樣做:
calendarRange.map((day) => {
const dayEvents = events.filter((event) => day.get('initialDate').isSame(event.get('initialDate'), 'day')) // we get all events for each day
doSomeThingWithDays(dayEvents)
pullAllWith(events, dayEvents, (a, b) => a === b)
}
如何完成immutablejs相同的優化?我並不真的期待我的方法迭代列表,但爲了一個聰明的方式減少事件List
在一種方式,它變得越來越小...
順便說一句,我要補充,該方法是純功能與零副作用和使用尾遞歸。如果你想,說其餘的項目,你可以簡單地從'iter'返回一個值。 – Asti