Finderみたいに、ファイル名一覧を
frame1.png, frame002.png, ……, frame11.png, …
という流れに、数値順にソートしたい
通常のソートでは10などが2よりも先に来てしまうので、対応する
const sorted = filenames.sort((a, b) => {
const a1 = parseInt(a.replace(/[^0-9]/g, ''), 10);
const b1 = parseInt(b.replace(/[^0-9]/g, ''), 10);
const a2 = (a1 !== a1) ? 0 : a1;
const b2 = (b1 !== b1) ? 0 : b1;
if (a2 > b2) {
return 1;
} else if (a2 < b2) {
return -1;
}
return 0;
});
parseIntははじめの文字が数字でないとNaNを返すようなので、先に数字以外を置換してからparseIntしている
a1 !== a1
はNanのときのみ成立するのでこれを利用している
注意点としては、数字が入ってない場合の順番が不定なので、時によって入れ替わる可能性があること。
対処したい場合は、一番下の return 0
のところを return a < b
とかにしておくとよい。