Недавно у меня была ситуация, когда коллеге пришлось использовать 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 преобразовать этот массив в его сумму.

Разве вам не нравится, когда вам удается одновременно улучшить читабельность кода и его обслуживание?