localeCompare()
メソッドは参照文字列がソート順で引数で与えられた文字列と大なり、小なり、等しいとなるかどうかを示す数値を返します。
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
新しい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
を、あるいはまた別の負の値、正の値を返却するかもしれません。
パフォーマンス
巨大な配列のソートなど大量の文字列を比較する場合は Intl.Collator
オブジェクトを作成し、 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"
(不正な言語タグが除外される要件)を利用し、例外 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("2".localeCompare("10")); // 1
// オプションを使った数字
console.log("2".localeCompare("10", undefined, {numeric: true})); // -1
// ロケールタグを使った数字
console.log("2".localeCompare("10", "en-u-kn-true")); // -1
仕様
Specification |
---|
ECMAScript (ECMA-262) String.prototype.localeCompare の定義 |
ECMAScript Internationalization API (ECMA-402) String.prototype.localeCompare の定義 |
ブラウザ実装状況
BCD tables only load in the browser
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.