sirve que para manejo lista etiquetas comparar change cadenas javascript string strcmp

que - manejo de string en javascript



¿Hay un strcmp de JavaScript()? (4)

¿Alguien puede verificar esto por mí? JavaScript no tiene una versión de strcmp (), por lo que debe escribir algo como:

( str1 < str2 ) ? -1 : ( str1 > str2 ? 1 : 0 );


Javascript no lo tiene, como usted señala.

Se produjo una búsqueda rápida con:

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

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

Por supuesto, puedes agregar localeCompare si es necesario:

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

Y use str1.localeCompare(str2) todas partes, sin tener que preocuparse de si el navegador local se ha enviado con él. El único problema es que tendría que agregar soporte para locales y options si le importa eso.


Qué pasa

str1.localeCompare(str2)


Qué tal si:

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

Entonces, para comparar s1 con 2:

s1.strcmp(s2)


localeCompare() es lento , por lo tanto, si no le importa el orden "correcto" de cadenas de caracteres que no sean en inglés, pruebe con su método original o con un aspecto más limpio:

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

Este es un orden de magnitud más rápido que localeCompare() en mi máquina.

El + asegura que la respuesta siempre es numérica en lugar de booleana.