Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопрос по сортировке (https://javascript.ru/forum/misc/82124-vopros-po-sortirovke.html)

AleBa 16.03.2021 14:30

Вопрос по сортировке
 
Добрый день.
Подскажите пожалуйста как правильно отсортировать.
Я читаю папку с файлами и мне нужно отсортировать имена файлов по порядку.
import fs from 'fs';
import path from 'path';

const readDir = (dirname) => fs.readdirSync(path.resolve(dirname), 'utf8');

const d = readDir('папка с файлами').sort((a, b) => a - b);
console.log(d);

В итоге я получаю не отсортированный массив:

[
'Счет-фактура № 1014 от 28 февраля 2021 г.xls',
'Счет-фактура № 977 от 28 февраля 2021 г.xls',
'Счет-фактура № 990 от 28 февраля 2021 г.xls'
]

А если так:
const d = readDir('папка с файлами').sort((a, b) => a.localeCompare(b - a));

То

[
'Счет-фактура № 990 от 28 февраля 2021 г.xls',
'Счет-фактура № 977 от 28 февраля 2021 г.xls',
'Счет-фактура № 1014 от 28 февраля 2021 г.xls'
]

рони 16.03.2021 15:54

AleBa,
.sort((a,b) => a.match(/\d+/) - b.match(/\d+/))

рони 16.03.2021 16:47

AleBa,
или так
<script>
let f = [
'Счет-фактура № 1014 от 28 февраля 2021 г.xls',
'Счет-фактура № 977 от 28 февраля 2021 г.xls',
'Счет-фактура № 990 от 28 февраля 2021 г.xls'
]
const collator = new Intl.Collator(["en", "ru"], {
                    numeric: true
                });
f.sort(collator.compare)
document.write(`<pre>${JSON.stringify(f, "", 2)}</pre>`)
</script>


Часовой пояс GMT +3, время: 06:42.