Недавно у меня была ситуация, когда коллеге пришлось использовать API YouTube для получения такой информации о видео, как заголовок, миниатюра и продолжительность. Моя часть в этом заключалась в том, чтобы просмотреть его код.
Все было хорошо, пока мы не достигли синтаксического анализа длительности 💥.
Youtube получил длительность в таком формате:
или еще хуже, непоследовательный;
Все, что нам нужно, это целое число длительности в секундах, какой беспорядок!
Может быть, не так уж и беспорядок, если учесть, что это на самом деле ISO 8601.
Но определенно не такой беспорядочный, как решение моего коллеги по разбору этого 😎
Без обид!
Давайте исправим это крутыми maps
и reduces
?
Давайте начнем с лучшего регулярного выражения, чтобы получить согласованный массив часов, минут и секунд, независимо от того, есть он в строке или нет.
Вот так, массив со всем на месте.
Переходим к Математике. Теперь идея состоит в том, чтобы умножить секунды на 60
, минуты на 60*60
и часы на 60*60*60
. Вы видите образец? 60 ** 0
, 60 ** 1
и 60 ** 2
, 60
в степени индекса?
Итак, первое, что нужно сделать, это перевернуть массив, чтобы получить секунды в первом индексе i = 0
, минуты во втором i = 1
и часы в третьем i = 2
.
Теперь давайте map
эти числа, сначала мы parseInt
их, а затем число, умноженное на 60 в степени i
.
С математикой покончено.
Теперь нам просто нужно reduce
преобразовать этот массив в его сумму.
Разве вам не нравится, когда вам удается одновременно улучшить читабельность кода и его обслуживание?