任何人都可以为我验证这一点吗? JavaScript没有strcmp()的版本,所以你必须写出类似的东西:
( str1 < str2 ) ?
-1 :
( str1 > str2 ? 1 : 0 );
答案 0 :(得分:123)
怎么样?
str1.localeCompare(str2)
答案 1 :(得分:36)
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
and options
的支持。
答案 2 :(得分:18)
localeCompare()
is slow,所以如果你不关心&#34;正确&#34;订购非英文字符串,尝试原始方法或看起来更干净:
str1 < str2 ? -1 : +(str1 > str2)
这比我机器上的localeCompare()
快一个数量级。
+
确保答案始终是数字而不是布尔值。
答案 3 :(得分:1)
var strcmp = new Intl.Collator(undefined, {numeric:true, sensitivity:'base'}).compare;
用法:strcmp(string1, string2)
结果:1
表示string1较大,0
表示相等,-1
表示string2较大。
与String.prototype.localeCompare
此外,numeric:true
使其进行逻辑数字比较
答案 4 :(得分:0)
怎么样:
String.prototype.strcmp = function(s) {
if (this < s) return -1;
if (this > s) return 1;
return 0;
}
然后,将s1与2进行比较:
s1.strcmp(s2)
答案 5 :(得分:0)
来自这篇 How to Check if Two Strings are Equal in JavaScript 文章:
===
运算符来检查它们是否相等。e + ◌́ = é
)时,您首先将它们标准化,然后再比较相等性,如下所示 -
s1.normalize() === s2.normalize()