У меня есть файлы с такими названиями:
X-1.pdf
X-2.pdf
X-3.pdf
.
.
.
X-15.pdf
При заказе на основе строкового значения последовательность выглядит следующим образом:
X-1.pdf
X-10.pdf
X-11.pdf
.
.
.
Предполагая, что эти файлы хранятся в строковом массиве, как бы мне упорядочить массив, чтобы файлы отображались «ожидаемым» образом, т.е.
X-1.pdf
X-2.pdf
.
.
.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, что лучший способ - удалить альфа-символы и отсортировать их таким образом.
const files = ['X-1.pdf', 'X-10.pdf', 'X-2.pdf', 'X-3.pdf', 'X-4.pdf', 'X-11.pdf', 'X-5.pdf', 'X-6.pdf', 'X-8.pdf', 'X-9.pdf', 'X-12.pdf', 'X-13.pdf', 'X-14.pdf', 'X-15.pdf', 'X-7.pdf']
files.sort((a, b) => parseInt(b.replace(/[^0-9]/, '')) - parseInt(a.replace(/[^0-9]/, '')))
console.info(files)Вы можете использовать localeCompare с параметром numeric, установленным на true:
console.info(
['X-11.pdf',
'X-1.pdf',
'X-9.pdf',
'X-10.pdf',
'X-2.pdf',
].sort((a, b) => a.localeCompare(b, 'en', {numeric: true }))
)
Это намного элегантнее, чем повторяющийся ответ.