有没有JavaScript strcmp()?

任何人都可以validation这个对我? JavaScript没有strcmp()的版本,所以你必须写出如下所示:

( str1 < str2 ) ? -1 : ( str1 > str2 ? 1 : 0 ); 

关于什么

 str1.localeCompare(str2) 

Javascript没有它,正如你指出的那样。

快速search:

 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) ,而不用担心本地浏览器随附的问题。 唯一的问题是,如果你关心的话,你将不得不添加对localesoptions支持。

localeCompare()是慢的 ,所以如果你不关心非英文string的“正确”sorting,请尝试你的原始方法或看起来更干净的:

 str1 < str2 ? -1 : +(str1 > str2) 

这比我的机器上的localeCompare()快了一个数量级。

+确保答案总是数字而不是布尔值。

怎么样:

 String.prototype.strcmp = function(s) { if (this < s) return -1; if (this > s) return 1; return 0; } 

然后,比较s1和2:

 s1.strcmp(s2) 

试试这个更简洁易懂的语句

 (a>b)-(a<b) 

这是约。 比…慢50%

 (a<b)?-1:((a>b)?1:0)