--- title: String.prototype.localeCompare() slug: Web/JavaScript/Reference/Global_Objects/String/localeCompare tags: - Internationalization - JavaScript - Method - Prototype - Reference - String translation_of: Web/JavaScript/Reference/Global_Objects/String/localeCompare ---
localeCompare()
メソッドは参照文字列がソート順で引数で与えられた文字列と大なり、小なり、等しいとなるかどうかを示す数値を返します。
新しいlocales
と options
引数によってアプリケーションはソート順で使われる言語を指定し関数の振る舞いをカスタマイズできます。古い実装では、locales
引数とoptions
引数は無視されます。使用されるローケルとソート順は完全に実装依存しています。
referenceStr.localeCompare(compareString[, locales[, options]])
compareString
referenceStr
と比較される文字列。
locales
、 options
これらの引数は関数の振る舞いをカスタマイズし、使用されるべきフォーマット規約の言語をアプリケーションに決めさせます。引数 locales
、 options
を無視する実装においては、使用されるロケールと返却される文字列の書式は完全に実装依存となります。
これらのパラメーターの詳細及び使用方法については Intl.Collator()
コンストラクター を見てください。
referenceStr
が compareString
より前に出現する場合は負数、 referenceStr
が compareString
より後に出現する場合は正数、等しい場合は 0 。
referenceStr
が compareString
より辞書順で先に来るか、後に来るか、あるいは等しいかを示す整数を返します。
referenceStr
が compareString
より先に出現する場合は負数referenceStr
が compareString
より後に出現する場合は正数0
戻り値が厳密に -1 や 1 であると考えないように
負数と正数が結果としてどんな数値になるかはブラウザー間(及びブラウザーのバージョン間)で異なります。これは W3C の仕様が負の値か正の値かとだけ指定しているためです。ブラウザーによっては-2
や 2
を、あるいはまた別の負の値、正の値を返却するかもしれません。
巨大な配列のソートなど大量の文字列を比較する場合は {{jsxref("Global_Objects/Collator", "Intl.Collator")}} オブジェクトを作成し、 {{jsxref("Collator.prototype.compare", "compare")}} プロパティで提供される関数を利用すると良いでしょう。
localeCompare()
を使う// 文字 "a" は "c" は負数になります 'a'.localeCompare('c'); // -2 や -1 (あるいはまた別の負数) // 単語 "check" はアルファベット順に "against" より後ろなので正数になります 'check'.localeCompare('against'); // 2 や -1 (あるいはまた別の正数) // "a" と"a" は等しいので自然数 0 になります 'a'.localeCompare('a'); // 0
localeCompare()
は case-insensitive な配列のソートを行います。
let items = ['réservé', 'Premier', 'Cliché', 'communiqué', 'café', 'Adieu']; items.sort( (a, b) => a.localeCompare(b, 'fr', {ignorePunctuation: true})); // ['Adieu', 'café', 'Cliché', 'communiqué', 'Premier', 'réservé']
引数 locales
と options
はすべてのプラウザでまだサポートされていません。
実装がこれらをサポートしているか調べるため引数 "i"
(不正な言語タグが除外される要件)を利用し、例外 {{jsxref("RangeError")}} を調べます。
function localeCompareSupportsLocales() { try { 'a'.localeCompare('b', 'i'); } catch (e) { return e.name === 'RangeError'; } return false; }
locales
を使うlocaleCompare()
によって得られる結果は言語間で違います。アプリケーションのユーザインターフェイスで使用される言語のソート順を得るために、 locales
引数を使用してその言語(そしておそらくいくつかのフォールバック言語)を指定していることを確かめて下さい。:
console.log('ä'.localeCompare('z', 'de')); // 負数: ドイツ語で ä は a に分類される console.log('ä'.localeCompare('z', 'sv')); // 正数: スウェーデン語では ä は z の後になる
options
を使うlocaleCompare()
によって得られる結果はoptions
引数を使用することによってカスタマイズできます。:
// ドイツ語では ä の base letter は a console.log('ä'.localeCompare('a', 'de', { sensitivity: 'base' })); // 0 // スウェーデン語では ä と a は異なる base letters console.log('ä'.localeCompare('a', 'sv', { sensitivity: 'base' })); // a positive value
// デフォルトでは "2" > "10" console.log(); // 1 // オプションを使った数字 console.log( ); // -1 // ロケールタグを使った数字 console.log( ); // -1
Specification |
---|
{{SpecName('ESDraft', '#sec-string.prototype.localecompare', 'String.prototype.localeCompare')}} |
{{SpecName('ES Int Draft', '#sup-String.prototype.localeCompare', 'String.prototype.localeCompare')}} |
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
{{Compat("javascript.builtins.String.localeCompare")}}