LoginSignup
2

More than 5 years have passed since last update.

JavaScriptでファイル名順にソートする

Posted at

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 とかにしておくとよい。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2