Мне нужна функция, которая может принимать строки дней, такие как «Пн, Вт, Ср, Чт, Пт» и возвращать «Пн-Пт». Конечно, она не может просто возвращаться первой и последней с конкатенацией «-», но следует учитывать «Пн, Вт, Чт, Пт», в этом случае можно либо вернуть строку ввода, либо «Пн-Вт, Чт-Пт»
Виртуальные приветствия тому, кто может помочь!
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));
В настоящее время все вышеперечисленное работает в соответствии с моим первым «вопросом», хотя я бы хотел более элегантный / простой подход. Также, конечно, он не будет выдавать «Пн-Вт, Чт-Пт» для входной строки «Пн, Вт, Чт, Пт» - любые мысли или улучшения приветствуются!