Ответ 1
Вы можете использовать метод localeCompare()
.
string_a.localeCompare(string_b);
/* Expected Returns:
0: exact match
-1: string_a < string_b
1: string_a > string_b
*/
Дальнейшее чтение:
Я пытаюсь оптимизировать функцию, которая выполняет двоичный поиск строк в Javascript.
Двоичный поиск требует, чтобы вы знали, является ли ключ ==
точкой поворота или <
.
Но для этого требуется два сравнения строк в Javascript, в отличие от языков C
, которые имеют функцию strcmp()
, которая возвращает три значения (-1, 0, +1) для (меньше, равно, больше).
Есть ли такая нативная функция в Javascript, которая может возвращать трехмерное значение, так что на каждой итерации бинарного поиска требуется только одно сравнение?
Вы можете использовать метод localeCompare()
.
string_a.localeCompare(string_b);
/* Expected Returns:
0: exact match
-1: string_a < string_b
1: string_a > string_b
*/
Дальнейшее чтение:
Ну в JavaScript вы можете проверить две строки для значений, таких же, как целые, поэтому вы можете сделать это:
"A" < "B"
"A" == "B"
"A" > "B"
И поэтому вы можете сделать свою собственную функцию, которая проверяет строки так же, как и strcmp()
.
Таким образом, это будет функция, которая делает то же самое:
function strcmp(a, b)
{
return (a<b?-1:(a>b?1:0));
}
Вы можете использовать операторы сравнения для сравнения строк. Функция strcmp
может быть определена следующим образом:
function strcmp(a, b) {
if (a.toString() < b.toString()) return -1;
if (a.toString() > b.toString()) return 1;
return 0;
}
Изменить. Здесь хранится функция сравнения строк, которая принимает не более минуты {length (a), length (b)}, чтобы рассказать, как две строки связаны друг с другом:
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;
}