it-swarm.com.de

Optimale Möglichkeit zum Vergleichen von Zeichenfolgen in JavaScript?

Ich versuche, eine Funktion zu optimieren, die die binäre Suche von Zeichenfolgen in JavaScript ausführt.

Bei der binären Suche müssen Sie wissen, ob der Schlüssel == der Drehpunkt oder < der Drehpunkt ist.

Dies erfordert jedoch zwei Zeichenfolgenvergleiche in JavaScript, anders als in C ähnlichen Sprachen, die die strcmp() -Funktion haben, die drei Werte (-1, 0, +1) zurückgibt (kleiner als, gleich, größer als).

Gibt es eine solche native Funktion in JavaScript, die einen ternären Wert zurückgeben kann, sodass in jeder Iteration der binären Suche nur ein Vergleich erforderlich ist?

369
HRJ

Sie können die Methode localeCompare() verwenden.

string_a.localeCompare(string_b);

/* Expected Returns:

 0:  exact match

-1:  string_a < string_b

 1:  string_a > string_b

 */

Weitere Lektüre:

496
Daniel Vassallo

Nun, in JavaScript können Sie zwei Zeichenfolgen auf Werte überprüfen, die mit ganzen Zahlen identisch sind, damit Sie dies tun können:

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

Und deshalb können Sie Ihre eigene Funktion erstellen, die Zeichenfolgen auf die gleiche Weise prüft wie die Funktion strcmp().

Das wäre also die Funktion, die dasselbe tut:

function strcmp(a, b)
{   
    return (a<b?-1:(a>b?1:0));  
}
53
Cipi

Sie können verwenden Sie die Vergleichsoperatoren, um Zeichenfolgen zu vergleichen . Eine strcmp -Funktion könnte folgendermaßen definiert werden:

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

Edit Hier ist eine String-Vergleichsfunktion, die höchstens min {length ( a ), length ( b )} Vergleiche, um festzustellen, wie zwei Zeichenfolgen miteinander zusammenhängen:

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;
}
12
Gumbo