Мне было интересно, как обрезать имя файла в JS, чтобы оно показывало "..." или любое другое приложение после определенного количества символов, наиболее эффективный способ обработки всех возможных тестовых случаев.
Правила
- Показывать фактическое расширение файла, а не последний символ после разделения имени строки на «.»
- Функция должна принимать имя входного файла(строка), количество символов для обрезки (целое число) и приложение (строка) в качестве параметра.
- Под эффективностью я подразумеваю, что я ожидаю написать меньше строк кода и обработать все возможные крайние случаи.
Примеры входных данных
- myAwesomeFile.min.css
- my Awesome File.tar.gz
- file. png
Ожидаемый вывод (скажем, я хочу обрезать после 5 символов)
- myAwe .... min.css
- my Aw .... tar.gz
- file.png
Редактирование вопроса, чтобы показать мою попытку
function trimFileName(str, noOfChars, appendix) {
let nameArray = str.split(".");
let fileType = `.${nameArray.pop()}`;
let fileName = nameArray.join(" ");
if (fileName.length >= noOfChars) {
fileName = fileName.substr(0, noOfChars) + appendix;
};
return (fileName + fileType);
}
console.log(trimFileName("myAwesomeFile.min.css", 5, "..."));
console.log(trimFileName("my Awesome File.tar.gz", 5, "..."));
console.log(trimFileName("file.png", 5, "..."));
Edit # 2: Не стесняйтесь идти вперед и редактировать вопрос, если вы думаете, что это не стандартное ожидание и добавить больше крайних случаев к образцувходы и ожидаемые результаты.
Редактировать # 3: Добавил еще несколько деталей к вопросу после новых комментариев. Я знаю, что моя попытка не соответствует ожидаемым результатам (и я не уверен, является ли вывод, который я перечислил выше, стандартным ожиданием или нет).
Редактировать # 4 (Финал): Убрано правило не разбивать слово посередине после непрерывной обратной реакции в комментариях и изменено правило, чтобы удовлетворить более реалистичные и практичные варианты использования.