Bất cứ ai có thể xác minh điều này cho tôi? JavaScript không có phiên bản strcmp (), vì vậy bạn phải viết ra một cái gì đó như:
( str1 < str2 ) ?
-1 :
( str1 > str2 ? 1 : 0 );
Bất cứ ai có thể xác minh điều này cho tôi? JavaScript không có phiên bản strcmp (), vì vậy bạn phải viết ra một cái gì đó như:
( str1 < str2 ) ?
-1 :
( str1 > str2 ? 1 : 0 );
Câu trả lời:
Thế còn
str1.localeCompare(str2)
localeCompare()
đôi khi hành xử khác nhau trên mỗi trình duyệt.
Javascript không có nó, như bạn chỉ ra.
Một tìm kiếm nhanh đã đưa ra:
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 ) );
}
từ http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strcmp/
Tất nhiên, bạn chỉ có thể thêm localeCompare nếu cần:
if (typeof(String.prototype.localeCompare) === 'undefined') {
String.prototype.localeCompare = function(str, locale, options) {
return ((this == str) ? 0 : ((this > str) ? 1 : -1));
};
}
Và sử dụng str1.localeCompare(str2)
ở mọi nơi mà không phải lo lắng về trình duyệt cục bộ đã được cung cấp cùng với nó. Vấn đề duy nhất là bạn sẽ phải thêm hỗ trợ locales
vàoptions
nếu bạn quan tâm đến điều đó.
==
sử dụng và không ===
tránh khỏi điều sau chuyển đổi loại và do đó là micro thứ hai nhanh hơn.
var a = this.toUpperCase(); var b = str.toUpperCase(); return ((a == b) ? 0 : ((a > b) ? 1 : -1));
localeCompare()
chậm , vì vậy nếu bạn không quan tâm đến thứ tự "chính xác" của các chuỗi ký tự không phải tiếng Anh, hãy thử phương pháp ban đầu của bạn hoặc tìm kiếm rõ ràng hơn:
str1 < str2 ? -1 : +(str1 > str2)
Đây là một thứ tự cường độ nhanh hơn localeCompare()
trên máy của tôi.
Việc +
đảm bảo rằng câu trả lời luôn luôn là số chứ không phải boolean.
(str1 > str2) - (str1 < str2)
var strcmp = new Intl.Collator(undefined, {numeric:true, sensitivity:'base'}).compare;
Sử dụng: strcmp(string1, string2)
Kết quả: 1
có nghĩa là chuỗi1 lớn hơn, 0
có nghĩa là bằng nhau, -1
có nghĩa là chuỗi2 lớn hơn.
Điều này có hiệu suất cao hơn String.prototype.localeCompare
Ngoài ra, numeric:true
làm cho nó làm so sánh số logic
Làm thế nào về:
String.prototype.strcmp = function(s) {
if (this < s) return -1;
if (this > s) return 1;
return 0;
}
Sau đó, để so sánh s1 với 2:
s1.strcmp(s2)