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 localesundoptions 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: 1bedeutet, dass string1 größer ist, 0bedeutet gleich, -1bedeutet , dass string2 größer ist.
Dies hat eine höhere Leistung als String.prototype.localeCompare
Auch numeric:truemacht 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)