137 votes

Existe-t-il un strcmp() JavaScript ?

Quelqu'un peut-il le vérifier pour moi ? JavaScript ne dispose pas d'une version de strcmp(), vous devez donc écrire quelque chose comme :

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

149voto

newacct Points 42530

Qu'en est-il

str1.localeCompare(str2)

43voto

voyager Points 17283

Javascript ne l'a pas, comme vous le soulignez.

Une recherche rapide a permis de trouver :

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/

Bien sûr, vous pouvez simplement ajouter localeCompare si nécessaire :

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

Et utiliser str1.localeCompare(str2) partout, sans avoir à se soucier de savoir si le navigateur local est livré avec. Le seul problème est qu'il faudrait ajouter la prise en charge de locales y options si vous vous souciez de cela.

27voto

1'' Points 5044

localeCompare() est lent Si vous ne vous souciez pas de l'ordre "correct" des chaînes de caractères non anglaises, essayez votre méthode originale ou celle qui est plus propre :

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

C'est un ordre de grandeur plus rapide que localeCompare() sur ma machine.

El + garantit que la réponse est toujours numérique plutôt que booléenne.

5voto

Anonymous Points 51
var strcmp = new Intl.Collator(undefined, {numeric:true, sensitivity:'base'}).compare;

Utilisation : strcmp(string1, string2)

Résultat : 1 signifie que la chaîne 1 est plus grande, 0 signifie égal, -1 signifie que la chaîne 2 est plus grande.

Il est plus performant que String.prototype.localeCompare

Aussi, numeric:true permet de faire une comparaison logique de nombres

0voto

Runay Dhaygude Points 13

De ce Comment vérifier si deux chaînes de caractères sont égales en JavaScript article :

  1. En général, si vos chaînes de caractères ne contiennent que des caractères ASCII, vous utilisez la fonction === pour vérifier s'ils sont égaux.
  2. Mais lorsque vos chaînes de caractères contiennent des caractères qui incluent des caractères de combinaison (ex. e + = é ), vous les normalisez d'abord avant de les comparer pour l'égalité comme suit- s1.normalize() === s2.normalize()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X