Modo ottimale per confrontare le stringhe in JavaScript?

Sto cercando di ottimizzare una funzione che esegue la ricerca binaria di stringhe in JavaScript.

La ricerca binaria richiede che tu sappia se la chiave è == il pivot o < il pivot.

Ma ciò richiede due confronti tra stringhe in JavaScript, a differenza dei linguaggi come C che hanno la funzione strcmp() che restituisce tre valori (-1, 0, +1) per (minore di, uguale, maggiore di).

Esiste una funzione nativa in JavaScript, che può restituire un valore ternario in modo che sia necessario un solo confronto in ogni iterazione della ricerca binaria?

È ansible utilizzare il metodo localeCompare() .

 string_a.localeCompare(string_b); /* Expected Returns: 0: exact match -1: string_a < string_b 1: string_a > string_b */ 

Ulteriori letture:

  • Stack Overflow – Esiste uno strcmp JavaScript ()?
  • Punto tutorial: stringa JavaScript – metodo localeCompare ()

Bene in JavaScript puoi controllare due stringhe per valori uguali a numeri interi così puoi farlo:

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

E quindi puoi creare la tua funzione che controlla le stringhe allo stesso modo di strcmp() .

Quindi questa sarebbe la funzione che fa lo stesso:

 function strcmp(a, b) { return (ab?1:0)); } 

È ansible utilizzare gli operatori di confronto per confrontare le stringhe . Una funzione strcmp potrebbe essere definita in questo modo:

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

Modifica Ecco una funzione di confronto delle stringhe che impiega al massimo min {length ( a ), length ( b )} confronti per indicare come due stringhe si rapportano l’una con l’altra:

 function strcmp(a, b) { a = a.toString(), b = b.toString(); for (var i=0,n=Math.max(a.length, b.length); i b.charAt(i) ? -1 : 1; }