La meilleure façon de comparer les chaînes de caractères en JavaScript? [dupliquer]

cette question a déjà une réponse ici:

j'essaie d'optimiser une fonction qui fait une recherche binaire des chaînes en JavaScript.

la recherche binaire exige de savoir si la clé est == le pivot ou < le pivot.

mais cela nécessite deux comparaisons de chaîne en JavaScript, contrairement à C comme les langues qui ont la fonction strcmp() qui renvoie trois valeurs (-1, 0, +1) pour (moins que, égal, plus grand que).

Existe-t-il une telle fonction native en JavaScript, qui peut renvoyer une valeur ternaire de sorte qu'une seule comparaison est nécessaire dans chaque itération de la recherche binaire?

315
demandé sur sg7 2010-01-30 13:51:05
la source

3 ответов

vous pouvez utiliser la méthode localeCompare() .

string_a.localeCompare(string_b);

/* Expected Returns:

 0:  exact match

-1:  string_a < string_b

 1:  string_a > string_b

 */

Autre Lecture:

434
répondu Daniel Vassallo 2018-03-17 21:26:53
la source

dans JavaScript, vous pouvez vérifier deux chaînes de caractères pour des valeurs identiques à des entiers donc vous pouvez le faire:

  • "A" < "B"
  • "A" == "B"
  • "A" > "B"

et donc vous pouvez faire votre propre fonction qui vérifie les chaînes de la même manière que le strcmp() .

ainsi ce serait la fonction qui fait la même chose:

function strcmp(a, b)
{   
    return (a<b?-1:(a>b?1:0));  
}
44
répondu Cipi 2015-01-14 14:32:10
la source

vous pouvez utiliser les opérateurs de comparaison pour comparer les chaînes . Une fonction strcmp pourrait être définie comme ceci:

function strcmp(a, b) {
    if (a.toString() < b.toString()) return -1;
    if (a.toString() > b.toString()) return 1;
    return 0;
}

Edit Voici une comparaison de chaîne fonction qui prend au plus min { longueur( un ), longueur( b ) } comparaisons de dire comment les deux chaînes se rapportent les uns aux autres:

function strcmp(a, b) {
    a = a.toString(), b = b.toString();
    for (var i=0,n=Math.max(a.length, b.length); i<n && a.charAt(i) === b.charAt(i); ++i);
    if (i === n) return 0;
    return a.charAt(i) > b.charAt(i) ? -1 : 1;
}
13
répondu Gumbo 2010-01-31 20:01:13
la source