Как использовать фильтр Лодаш и карту в одну строку - PullRequest
0 голосов
/ 21 мая 2019

У меня есть код, который использует 2 метода метода lodash и карту

 const filtered_holidays = filter(holidays, day => day.holiday === 1);
 const type_calendar_holidays = map(filtered_holidays, 'day');

Как переписать это в 1 строку в lodash? Нечто подобное

holidays.filter().map()....

 const filtered_holidays = filter(holidays, day => day.holiday === 1);
 const type_calendar_holidays = map(filtered_holidays, 'day');

Ответы [ 4 ]

1 голос
/ 21 мая 2019

Вы можете обернуть фильтр картой:

 const result = map(filter(holidays, day => day.holiday === 1),'day');

Вы можете использовать sequence (требуется импортировать весь пакет lodash):

 const result = _(holidays).filter(day => day.holiday === 1).map('day').value();

Вы можете использовать _.flow() (или _.flowRight() он же композит) с lodash / fp :

 const result = flow(filter(day => day.holiday === 1), map('day'))(holidays)

Примечание: flow и flowRight также можно использовать в обычном lodash, но поскольку порядок параметров обратный, а функция не имеет автоматического каррирования, вам необходимо использовать _.partialRight().

 const result = flow(partialRight(filter, day => day.holiday === 1), partialRight(map, 'day'))(holidays)

Самым простым решением в этом случае является использование цепочки vanilla js:

const result= holidays.filter(day => day.holiday === 1).map(o => o.day);
0 голосов
/ 22 мая 2019

Просто вложите filter:

const type_calendar_holidays = map(filter(holidays, ({ holiday }) => holiday == 1), 'day');
0 голосов
/ 21 мая 2019

В Vanilla JS вы можете использовать reduce, например:

holidays.reduce((r, { day, holiday }) => holiday === 1 ? r.concat(day) : r, [])
0 голосов
/ 21 мая 2019

Просто положить фильтр внутрь?

const type_calendar_holidays = map(filter(holidays, day => day.holiday === 1), 'day');
...