Как вывести дату, ближайшую к сегодняшней, учитывая условия

Есть информация по каждому дню недели, из которой следует, что некоторые дни не активны. Не могу понять, как найти ближайший активный день. То есть если сегодня 27.05.2020(среда), то с учетом данных ближайшим активным будет суббота(30.05.2020). Пыталась использовать momentjs.

const currentDate = new Date();
const weekdayNumCurrent = moment(currentDate).format("dddd");
const weekdaysData = [{
    day_number: 1,
    is_active: false
  },
  {
    day_number: 2,
    is_active: true
  },
  {
    day_number: 3,
    is_active: false
  },
  {
    day_number: 4,
    is_active: false
  },
  {
    day_number: 5,
    is_active: false
  },
  {
    day_number: 6,
    is_active: true
  },
  {
    day_number: 7,
    is_active: false
  },
];
const activeDays = weekdaysData.filter((el) => el.is_active === true);
console.log(activeDays);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>


Ответы (1 шт):

Автор решения: Денис Степанов

Можно разбить массив дней по текущему, склеить в обратном порядке, найти индекс и прибавить к текущей дате. Но скорее всего можно, как-нибудь покрасивше.

const currentDate = new Date();
const weekdayNumCurrent = moment(currentDate).format("E");
const weekdaysData = [{
    day_number: 1,
    is_active: false
  },
  {
    day_number: 2,
    is_active: false
  },
  {
    day_number: 3,
    is_active: true
  },
  {
    day_number: 4,
    is_active: false
  },
  {
    day_number: 5,
    is_active: false
  },
  {
    day_number: 6,
    is_active: true
  },
  {
    day_number: 7,
    is_active: false
  },
];

const nextActiveDay = 1 + weekdaysData.slice(weekdayNumCurrent)
  .concat(weekdaysData.slice(0, weekdayNumCurrent))
  .findIndex((el) => el.is_active === true);

console.log(moment(currentDate).add(nextActiveDay, 'd').format("dddd, MMMM Do YYYY"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>

→ Ссылка