Возвращает объединенные дни недели, если задана строка последовательных дней недели - PullRequest
0 голосов
/ 30 апреля 2020

Мне нужна функция, которая может принимать строки дней, такие как «Пн, Вт, Ср, Чт, Пт» и возвращать «Пн-Пт». Конечно, она не может просто возвращаться первой и последней с конкатенацией «-», но следует учитывать «Пн, Вт, Чт, Пт», в этом случае можно либо вернуть строку ввода, либо «Пн-Вт, Чт-Пт»

Виртуальные приветствия тому, кто может помочь!

function daysConcat(days) {
  let key = ['Sun','Mon','Tues','Wed','Thu','Fri','Sat'];
  let daysArr = days.split(',');
  let consecutive = true;
  let lastIndex = '';

  let concatDays = daysArr.filter((day, i, arr) => {
    if (day === arr[arr.length-1] && consecutive && key.indexOf(day) === lastIndex+1) {
      return day;
    } else if (day === arr[0]) {
      lastIndex = key.indexOf(day);
      return day;
    } else if (key.indexOf(day) === lastIndex+1) {
        lastIndex = key.indexOf(day);
    } else {
      consecutive = false;
    }
  })

  if (concatDays.length > 1) {
    return `${concatDays[0]} - ${concatDays[concatDays.length-1]}`
  } else {
    return days
  }

}

let consecutiveA = 'Mon,Tues,Wed,Thu,Fri';
console.log(daysConcat(consecutiveA));

let consecutiveB = 'Mon,Tues,Wed,Thu';
console.log(daysConcat(consecutiveB));

let notConsecutiveA = 'Mon,Tues,Thu,Fri';
console.log(daysConcat(notConsecutiveA));

let notConsecutiveB = 'Sun,Mon,Tues,Thu,Fri';
console.log(daysConcat(notConsecutiveB));

В настоящее время все вышеперечисленное работает в соответствии с моим первым «вопросом», хотя я бы хотел более элегантный / простой подход. Также, конечно, он не будет выдавать «Пн-Вт, Чт-Пт» для входной строки «Пн, Вт, Чт, Пт» - любые мысли или улучшения приветствуются!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...