こんにちは。野中やすおです。
今回の記事では、JavaScriptのStringオブジェクトのメソッドであるlocaleCompareの紹介を行います。localeCompareは複数の文字列を比較するのに結構便利です。
localeCompareとは
localeCompare はJavaScriptのStringオブジェクトのメソッドで、二つの文字列を地域に依存する方法で比較します。
localeCompareの基本的な使い方
1 2 3 4 5 6 |
const str1 = "apple"; const str2 = "banana"; console.log(str1.localeCompare(str2)); // -1 console.log(str2.localeCompare(str1)); // 1 console.log(str1.localeCompare("apple")); // 0 |
上記の例を使用して、localeCompareの基本的な使い方を紹介します。
- str1.localeCompare(str2)が -1を返す場合、str1はstr2よりも辞書順で前にくることを意味しています。
- str2.localeCompare(str1)が 1を返す場合、str2はstr1よりも辞書順で後ろにくることを意味しています。
- 同じ文字列を比較すると、0を返します。
地域とオプションを指定する
またlocaleCompareを使用することで、任意の地域やオプションを指定して、詳細な比較を行うことができます。
例えば、大文字と小文字の区別をしない比較や、アクセント記号の有無を無視する比較ができます。
1 2 3 4 5 |
const str3 = "Äpfel"; const str4 = "apfel"; // ドイツ語の地域設定で比較(大文字と小文字の区別なし) console.log(str3.localeCompare(str4, 'de', { sensitivity: 'base' })); // 0 |
上記の例では、”Äpfel” と “apfel” がドイツ語の地域設定で比較され、大文字と小文字の区別が無視されるため、これらの文字列は等しいとされます。
sortと組み合わせて使用する
localeCompareが普段使用するにあたって本領を発揮するのがsortメソッドと組み合わせて使用する場合だと思います。
例えば、localeCompare メソッドを使ってバージョン番号を比較する場合、オプションを設定して数字を昇順(または降順)で並べ替えることができます。
1 2 3 4 5 |
const versions = ['1.10.0', '1.2.0', '1.9.0', '1.3.1', '1.3.0']; versions.sort((a, b) => a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' })); console.log(versions); // Array ["1.2.0", "1.3.0", "1.3.1", "1.9.0", "1.10.0"] |
上記の例では、以下のことが行われます。
- versions配列にバージョン番号が文字列として格納されます。
- sortメソッドを使用して配列をソートします。そして、 localeCompare を使用し、そのオプションに numeric: true を指定します。文字列内の数字が数値として比較されてソートされます。
- 上記の結果でversions 配列はバージョン番号が昇順にソートされた状態で出力されます。通常の文字列比較では ‘1.10.0’ が ‘1.2.0’ より先に来てしまいますが、numeric オプションにより正しい順序でソートされます。
以上、localeCompareの紹介でした!いざという時に覚えておくと便利なJavaScriptのメソッドです。
参考
MDN Web Docs
The localeCompare() method of String values returns a number…