Kann jemand dies für mich überprüfen? JavaScript hat keine Version von strcmp (), daher müssen Sie Folgendes schreiben:
( str1 < str2 ) ?
-1 :
( str1 > str2 ? 1 : 0 );
Kann jemand dies für mich überprüfen? JavaScript hat keine Version von strcmp (), daher müssen Sie Folgendes schreiben:
( str1 < str2 ) ?
-1 :
( str1 > str2 ? 1 : 0 );
Antworten:
Wie wäre es mit
str1.localeCompare(str2)
localeCompare()
verhält sich manchmal in jedem Browser anders.
Javascript hat es nicht, wie Sie betonen.
Eine schnelle Suche ergab:
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 ) );
}
von http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strcmp/
Natürlich können Sie bei Bedarf auch localeCompare hinzufügen:
if (typeof(String.prototype.localeCompare) === 'undefined') {
String.prototype.localeCompare = function(str, locale, options) {
return ((this == str) ? 0 : ((this > str) ? 1 : -1));
};
}
Und str1.localeCompare(str2)
überall verwenden, ohne sich Sorgen machen zu müssen, ob der lokale Browser mitgeliefert wurde. Das einzige Problem ist, dass Sie Unterstützung hinzufügen müssten locales
undoptions
wenn Sie sich dafür interessieren.
==
verwendet wird und nicht, ===
da letztere vermeiden Typumwandlung und damit ist diese Mikrosekunde schneller.
var a = this.toUpperCase(); var b = str.toUpperCase(); return ((a == b) ? 0 : ((a > b) ? 1 : -1));
localeCompare()
ist langsam . Wenn Sie sich also nicht für die "richtige" Reihenfolge von Zeichenfolgen interessieren, die nicht aus Englisch stammen, versuchen Sie es mit Ihrer ursprünglichen Methode oder der saubereren:
str1 < str2 ? -1 : +(str1 > str2)
Dies ist eine Größenordnung schneller als localeCompare()
auf meiner Maschine.
Das +
stellt sicher, dass die Antwort immer numerisch und nicht boolesch ist.
(str1 > str2) - (str1 < str2)
var strcmp = new Intl.Collator(undefined, {numeric:true, sensitivity:'base'}).compare;
Verwendung: strcmp(string1, string2)
Ergebnis: 1
bedeutet, dass string1 größer ist, 0
bedeutet gleich, -1
bedeutet , dass string2 größer ist.
Dies hat eine höhere Leistung als String.prototype.localeCompare
Auch numeric:true
macht es tun logische Nummer Vergleich
Wie wäre es mit:
String.prototype.strcmp = function(s) {
if (this < s) return -1;
if (this > s) return 1;
return 0;
}
Dann, um s1 mit 2 zu vergleichen:
s1.strcmp(s2)