Просто добавить другой фильтр?Также e.arrival_date <= arrival_to && e.arrival_date >= arrival_to
совпадает с e.arrival_date === arrival_to
, так как может совпадать только эта точная дата.Дата не может быть одновременно и> и <другой датой одновременно.Так что-то вроде этого может сработать: </p>
const dates = [
{arrival_date:'2019-01-01',departure_date:'2019-01-07'},
{arrival_date:'2019-01-07',departure_date:'2019-01-09'},
{arrival_date:'2019-01-10',departure_date:'2019-01-20'}
];
let is_filter_by_arrival_date = true;
let is_filter_by_dept_date = true;
let arrival_from = null;
let arrival_to = '2019-01-01';
let dept_from = null;
let dept_to = '2019-01-07';
let results = dates.filter( timeslot => {
if ( is_filter_by_arrival_date && is_filter_by_dept_date ) {
return timeslot.arrival_date === arrival_to && timeslot.departure_date === dept_to;
}
else if ( is_filter_by_arrival_date ) {
return timeslot.arrival_date === arrival_to;
}
else if ( is_filter_by_dept_date ) {
return timeslot.departure_date === dept_to;
}
else throw new Error( 'no valid filters selected' );
});
console.log( results );
Но я думаю, что у вас может быть ошибка в вашей логике.Если идея заключается в том, что пользователь может выбрать диапазон дат приезда и отъезда, следовательно, если бы у вас были оба параметраприбытие :_прибытие и прибытие_, то вам нужно сравнить e.arrival_date <= arrival_to && e.arrival_date >= arrival_from
вместо того, чтобы сравнивать с прибытием_ оба раза.Если это правда, то код становится:
const dates = [
{arrival_date:'2019-01-01',departure_date:'2019-01-07'},
{arrival_date:'2019-01-07',departure_date:'2019-01-09'},
{arrival_date:'2019-01-10',departure_date:'2019-01-20'}
];
let is_filter_by_arrival_date = true;
let is_filter_by_dept_date = true;
let arrival_from = '2018-12-30';
let arrival_to = '2019-01-03';
let dept_from = '2019-01-07';
let dept_to = '2019-01-15';
let results = dates.filter( timeslot => {
if ( is_filter_by_arrival_date && is_filter_by_dept_date ) {
return timeslot.arrival_date >= arrival_from && timeslot.arrival_date <= arrival_to && timeslot.departure_date >= dept_from && timeslot.departure_date <= dept_to;
}
else if ( is_filter_by_arrival_date ) {
return timeslot.arrival_date >= arrival_from && timeslot.arrival_date <= arrival_to
}
else if ( is_filter_by_dept_date ) {
return timeslot.departure_date >= dept_from && timeslot.departure_date <= dept_to
}
else throw new Error( 'no valid filters selected' );
});
console.log( results );
Фильтр может быть записан короче с троицами, как показывают другие решения.Но я предпочел написать его полностью с помощью операторов if / else, чтобы было более понятно, как работает фильтр.