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