Mam dwie pętle, po jednej na każdy dzień miesiąca, inne ze wszystkimi wydarzeniami w tym miesiącu. Załóżmy, że mam 100 000 wydarzeń. Poszukuję sposobu usunięcia zdarzeń z głównych wydarzeń List
po ich "skonsumowaniu".immutable.js filtruj i mutuj (usuń) znaleziono wpisy
Kod jest coś takiego:
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}])
}
Z lodash może po prostu zrobić coś takiego:
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)
}
Jak osiągnąć ten sam optymalizacji z immutablejs? Naprawdę nie oczekuję rozwiązania dla mojego sposobu na iterację listy, ale na sprytny sposób zmniejszenia liczby zdarzeń List
w taki sposób, że staje się coraz mniejszy ..
Przy okazji należy dodać, podejście to czysta funkcjonalny zero efektów ubocznych, i za pomocą ogona rekursji. Jeśli chcesz, powiedz resztę pozycji, możesz po prostu zwrócić wartość z 'iter'. – Asti