Сравнение строк в JavaScript с учётом чисел
Обычно, когда строки сортируешь, и в них есть числа, то стандартная лексикографическая сортировка работает глупо:
> ['f10.png', 'f1.png', 'f2.png'].sort()
['f1.png', 'f10.png', 'f2.png']
Очевидно, что я хочу, чтобы f10.png шёл после f2.png, а не до.
Оказывается, что у метода сравнения строк — localeCompare — есть дополнительный параметр, в котором можно задать более логичное поведение.
> ['f10.png', 'f1.png', 'f2.png']
> .sort((a, z) => a.localeCompare(z, 'en', { numeric: true }))
['f1.png', 'f2.png', 'f10.png']
Третий параметр аналогичен options из Intl.Collator, и там есть ещё всякое помимо numeric.