◆ ソートが捗る
◆ 大文字は小文字より先という指定はできなそう
  ◆ abcd…… という並びがある上で大文字と小文字をどっち先に持ってくるかの設定は可能

いまさら知った関数なのですが JavaScript の String 型のメソッドに localeCompare というものがあります
ソートで使うとすごく便利でした
最近追加されたのかなと調べてみたのですが ES3 時代にもあったようです

「locale」 とあると言語環境によって動きが違ったり ブラウザでも結果が違ったり使いづらい系というイメージなのでメソッド一覧にはあっても無意識に読み飛ばしていたのかもしれません

localCompare

メソッドの機能は文字列を比較して数値で結果を返してくれます
-1, 0, 1 と C などの言語の文字列比較関数みたいなものです

単純な比較だけではなく 大文字小文字のどっちを先とみなすかや 大文字小文字を同じ扱いしたりアクセントのありなしを同じ扱いしたりができます
文字列として数字を比較した場合に 11 より 2 のほうがあとにくる問題がありますが 数字の場合には数値としての大小を考慮してくれるようにもできます

"A".localeCompare("B")
// -1
"A".localeCompare("a")
// 1
"A".localeCompare("a", {}, {sensitivity: "base"})
// 0
"A".localeCompare("a", {}, {caseFirst: "upper"})
// -1
"A".localeCompare("a", {}, {caseFirst: "lower"})
// 1
"11".localeCompare("2", {}, {numeric: true})
// 1
"11".localeCompare("2", {}, {numeric: false})
// -1

ソート

JavaScript の配列ソートってデフォルトだと文字列として単純なソートしかできません
オブジェクトでオプション渡せたらいいのにコールバック関数しかできません
コールバック関数で大小を比較して結果は -1, 0, 1 のように返さないといけないのですが どっちが大きいときに 0 より大きい値にすればいいのだっけ? とよく迷います
よく使うならともかく JavaScript ではここでしか使わないようなものなのでどっちがどっちかが覚えられないです

それが localeCompare を使えば 単純の文字列比較なら自分で大なり小なりで分岐して数値を返す必要はありません

["b", "a"].sort((a, b) => a.localeCompare(b))
// ["a", "b"]

コールバック関数にしないといけない手間はありますが アロー関数なら大した長さになりませんし オブジェクトの配列で text プロパティを基準にソートといったこともあるのでこれだけ楽に書けるだけでも十分楽になります

文字コード順じゃない

あまり困ることは無いと思いますが これまでの文字列の比較と全く同じ動きにするとなるとこのメソッドは使えません

;["A", "b", "C", "d"].sort()
// (4) ["A", "C", "b", "d"]
;["A", "b", "C", "d"].sort((a, b) => a.localeCompare(b))
// (4) ["A", "b", "C", "d"]

というように abcd という並びが優先されて 大文字だけ先にということができないです
case sensitivity の設定でも同じ文字の大文字小文字を同じとみなすかや どっちを先にするかということはできても 大文字全部を小文字全部より先にということは試した感じではできなそうでした