Представьте себе 8-разрядную функцию заполнения, которая преобразует:
- '123asd' -> '00000123asd'
- '19asd' -> '00000019asd'
Мы можем использовать дополненные строки, чтобы помочь нам отсортировать «19asd» до «123asd».
Используйте регулярное выражение /\d+/g
, чтобы помочь найти все числа, которые необходимо дополнить:
str.replace(/\d+/g, pad)
Следующее демонстрирует сортировку с использованием этой техники:
var list = [
'123asd',
'19asd',
'12345asd',
'asd123',
'asd12'
];
function pad(n) { return ("00000000" + n).substr(-8); }
function natural_expand(a) { return a.replace(/\d+/g, pad) };
function natural_compare(a, b) {
return natural_expand(a).localeCompare(natural_expand(b));
}
console.log(list.map(natural_expand).sort()); // intermediate values
console.log(list.sort(natural_compare)); // result
Промежуточные результаты показывают, что делает подпрограмма natural_expand (), и дают вам понимание того, как будет работать последующая подпрограмма natural_compare:
[
"00000019asd",
"00000123asd",
"00012345asd",
"asd00000012",
"asd00000123"
]
Выходы:
[
"19asd",
"123asd",
"12345asd",
"asd12",
"asd123"
]