ใครสามารถยืนยันสิ่งนี้ให้ฉันได้ไหม JavaScript ไม่มีเวอร์ชัน strcmp () ดังนั้นคุณต้องเขียนสิ่งต่างๆเช่น:
( str1 < str2 ) ?
-1 :
( str1 > str2 ? 1 : 0 );
ใครสามารถยืนยันสิ่งนี้ให้ฉันได้ไหม JavaScript ไม่มีเวอร์ชัน strcmp () ดังนั้นคุณต้องเขียนสิ่งต่างๆเช่น:
( str1 < str2 ) ?
-1 :
( str1 > str2 ? 1 : 0 );
คำตอบ:
เกี่ยวกับ
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)