回答:
どうですか
str1.localeCompare(str2)
localeCompare()
ブラウザーによって動作が異なる場合があります。
ご指摘のとおり、Javascriptにはありません。
クイック検索が思いついた:
function strcmp ( str1, str2 ) {
// http://kevin.vanzonneveld.net
// + original by: Waldo Malqui Silva
// + input by: Steve Hilder
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + revised by: gorthaur
// * example 1: strcmp( 'waldo', 'owald' );
// * returns 1: 1
// * example 2: strcmp( 'owald', 'waldo' );
// * returns 2: -1
return ( ( str1 == str2 ) ? 0 : ( ( str1 > str2 ) ? 1 : -1 ) );
}
http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strcmp/から
もちろん、必要に応じてlocaleCompareを追加することもできます。
if (typeof(String.prototype.localeCompare) === 'undefined') {
String.prototype.localeCompare = function(str, locale, options) {
return ((this == str) ? 0 : ((this > str) ? 1 : -1));
};
}
またstr1.localeCompare(str2)
、ローカルブラウザに同梱されているかどうかを心配することなく、どこでも使用できます。唯一の問題は、サポートを追加する必要がlocales
あり、options
それを気にかける場合です。
==
使用していません===
後者避けるため、型変換なので、マイクロ秒単位で高速になります。
var a = this.toUpperCase(); var b = str.toUpperCase(); return ((a == b) ? 0 : ((a > b) ? 1 : -1));
localeCompare()
は遅いので、英語以外の文字列の「正しい」順序を気にしない場合は、元の方法か、見た目をきれいにしてみてください。
str1 < str2 ? -1 : +(str1 > str2)
これはlocaleCompare()
私のマシンよりも桁違いに速いです。
+
答えは常に数値ではなく、ブール値であることを保証します。
(str1 > str2) - (str1 < str2)
var strcmp = new Intl.Collator(undefined, {numeric:true, sensitivity:'base'}).compare;
使用法: strcmp(string1, string2)
結果:1
string1が大きい、0
等しい、-1
string2が大きい、という意味です。
これはより高いパフォーマンスを持っています String.prototype.localeCompare
また、numeric:true
論理番号の比較を行います
どうですか:
String.prototype.strcmp = function(s) {
if (this < s) return -1;
if (this > s) return 1;
return 0;
}
次に、s1と2を比較します。
s1.strcmp(s2)