🐼

localeCompare で漢字をピンイン順に並べたり、a á à を並べたり

2021/08/29に公開

はじめに

Pokéctiveness2という、ポケモンの弱点を調べるモバイルウェブアプリを妻のためにつくってあげてましたのでございますが、英語対応したらなぜかインドネシアのバタム島で盛大に使っていただいております

これからバトルという差し迫ったタイミングでスマフォの仮想キーボードでポケモンの名前を悠長に入れるのって UI が間違ってると思ったので、50音で選択して

名前を選択して

表示するようにしてます

英語もアルファベット順でいいとして

中国語はどうしよう… ってずっと悩んでおりました

localeCompare が良い感じ

ポケモンの中国語名の最初の一文字をピンイン順に並べるという方法で香港とかは対応できそうです[1]
でも、漢字をピンイン順にならべるのってどうすればいいんだろ?

と思ってググったらこちらのSOの回答がそのものズバリで

sort(function(x,y){return x.localeCompare(y, 'zh')})

でバッチリでした

フランス語も、日本語も

フランス語もアクサン記号があって悩ましかったのですが

sort(function(x,y){return x.localeCompare(y, 'fr')})

でこの通り

ついでに、実は日本語も最初はこんな表を作って無理やり対応してたのですが

        [["あ","ア"],["い","イ"],["う","ウ"],["え","エ"],["お","オ"],
        ["か","カガ"],["き","キギ"],["く","クグ"],["け","ケゲ"],["こ","コゴ"],
        ["さ","サザ"],["し","シジ"],["す","スズ"],["せ","セゼ"],["そ","ソゾ"],
        ["た","タダ"],["ち","チヂ"],["つ","ツヅ"],["て","テデ"],["と","トド"],
        ["な","ナ"],["に","ニ"],["ぬ","ヌ"],["ね","ネ"],["の","ノ"],
        ["は","ハバパ"],["ひ","ヒビピ"],["ふ","フブプ"],["へ","ヘベペ"],["ほ","ホボポ"],
        ["ま","マ"],["み","ミ"],["む","ム"],["め","メ"],["も","モ"],
        ["や","ヤ"],["ゆ","ユ"],["よ","ヨ"],
        ["ら","ラ"],["り","リ"],["る","ル"],["れ","レ"],["ろ","ロ"],
        ["わ","ワ"]
        ],

localCompare でバッチリでした

sort(function(x,y){return x.localeCompare(y, 'ja')})

感想

localCompare サイコー!

脚注
  1. 台湾はピンインとはまた違う input method がポピュラーみたいです ↩︎

Discussion