C’è uno strcmp () JavaScript?

Qualcuno può verificare questo per me? JavaScript non ha una versione di strcmp (), quindi devi scrivere qualcosa come:

( str1  str2 ? 1 : 0 ); 

Che dire

 str1.localeCompare(str2) 

Javascript non ce l’ha, come tu fai notare.

Una ricerca rapida ha prodotto:

 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 ) ); } 

da http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strcmp/

Naturalmente, è sufficiente aggiungere localCompare se necessario:

 if (typeof(String.prototype.localeCompare) === 'undefined') { String.prototype.localeCompare = function(str, locale, options) { return ((this == str) ? 0 : ((this > str) ? 1 : -1)); }; } 

E usa str1.localeCompare(str2) ovunque, senza doversi preoccupare se il browser locale è stato spedito con esso. L’unico problema è che dovresti aggiungere il supporto per locales e options se ti interessa.

localeCompare() è lento , quindi se non ti interessa l’ordinamento “corretto” delle stringhe di caratteri non inglesi, prova il tuo metodo originale o il più pulito:

 str1 < str2 ? -1 : +(str1 > str2) 

Questo è un ordine di grandezza più veloce di localeCompare() sulla mia macchina.

Il + assicura che la risposta sia sempre numerica piuttosto che booleana.

Che ne dite di:

 String.prototype.strcmp = function(s) { if (this < s) return -1; if (this > s) return 1; return 0; } 

Quindi, per confrontare s1 con 2:

 s1.strcmp(s2)