Tôi có hai vòng, một cho mỗi ngày trong tháng, khác với tất cả các sự kiện trong tháng này. Giả sử tôi có 100 000 sự kiện. Tôi đang tìm cách xóa sự kiện khỏi các sự kiện chính List
khi chúng đã bị "tiêu thụ".bộ lọc và biến thể immutable.js (loại bỏ) tìm thấy các mục
Mã này là một cái gì đó như:
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}])
}
Với lodash Tôi chỉ có thể làm một cái gì đó như:
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)
}
Làm thế nào để thực hiện như nhau tối ưu hóa với immutablejs? Tôi không thực sự mong đợi một giải pháp cho cách của tôi để lặp lại danh sách, nhưng đối với một cách thông minh của việc giảm các sự kiện List
theo cách nó nhỏ hơn và nhỏ hơn ..
Btw, tôi nên thêm, phương pháp này là tinh khiết chức năng với không tác dụng phụ và sử dụng đệ quy đuôi. Nếu bạn muốn, nói phần còn lại của các mục, bạn có thể chỉ cần trả về một giá trị từ 'iter'. – Asti