🌟
A-1, A-2, A-10, B-1, ... のようにアルファベット順と数値を考慮してくれる比較関数 localeCompare
業務で学んだ内容についてのメモです。
やりたかったこと
↓ のような文字列の配列を、(ここでの並び順はランダムです)
['A-2', 'A-1', 'B-1', 'B-2', 'A-10']
↓ のようにアルファベット順と数値を考慮した並びにしたい。
['A-1', 'A-2', 'A-10', 'B-1', 'B-2']
できなかったこと
Array.prototype.sort() を実行するだけでは ↓ の並びになってしまいます。
const a = ['A-2', 'A-1', 'B-1', 'B-2', 'A-10']
const b = a.slice().sort()
console.log(b)
// output: ['A-1', 'A-10', 'A-2', 'B-1', 'B-2']
できたこと
Array.prototype.sort() の引数に String.prototype.localeCompare() の numeric
オプションを有効にしたものを与えることで実現できます。
const a = ['A-2', 'A-1', 'B-1', 'B-2', 'A-10']
const b = a.slice().sort((a, b) => a.localeCompare(b, 'ja', { numeric: true }))
console.log(b)
// output: ['A-1', 'A-2', 'A-10', 'B-1', 'B-2']
まとめ
String.prototype.localeCompare(), めっちゃ便利だな〜って感じたんですけどあまり認知されてなかった (個人的見解) のでそれっぽいタイトルと例を載せて紹介しました。
ありがとうございました。
Discussion