Y a-t-il un JavaScript strcmp()?

quelqu'un peut-il me le confirmer? JavaScript n'a pas de version de strcmp (), donc vous devez écrire quelque chose comme:

 ( str1 < str2 ) ? 
            -1 : 
             ( str1 > str2 ? 1 : 0 );
111
demandé sur Karel Bílek 2009-07-24 22:30:45

4 réponses

à propos

str1.localeCompare(str2)
117
répondu newacct 2016-07-01 16:51:52

Javascript ne l'a pas, comme vous le faites remarquer.

Une rapide recherche avec:

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 a expédié avec elle. Le seul problème est que vous auriez à ajouter le support pour locales et options si vous vous souciez de cela.

35
répondu Esteban Küber 2013-12-13 15:44:20

localeCompare() est lent , donc si vous ne vous souciez pas de l'ordre "correct" des chaînes de caractères non-anglais, essayez votre méthode originale ou l'apparence plus propre:

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

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

le + fait en sorte que la réponse soit toujours numérique plutôt que booléenne.

16
répondu 1'' 2017-05-23 11:47:06

Que Diriez-vous de:

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

ensuite, pour comparer s1 avec 2:

s1.strcmp(s2)
4
répondu Panos Papadopoulos 2013-06-12 14:55:45