Кто-нибудь может проверить это для меня? В JavaScript нет версии strcmp (), поэтому вам нужно написать что-то вроде:
( str1 < str2 ) ?
-1 :
( str1 > str2 ? 1 : 0 );
javascript
string
strcmp
Карел Билек
источник
источник
Ответы:
Что о
источник
localeCompare()
иногда ведет себя по-разному в разных браузерах.Как вы заметили, в Javascript этого нет.
Быстрый поиск дал:
из http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strcmp/
Конечно, при необходимости вы можете просто добавить localeCompare:
И используйте
str1.localeCompare(str2)
везде, не беспокоясь о том, поставляется ли с ним локальный браузер. Единственная проблема заключается в том, что вам придется добавить поддержку,locales
иoptions
если вам это небезразлично.источник
==
используется, а не===
потому, что последний избегает преобразование типа и, следовательно, на микросекунду быстрее.var a = this.toUpperCase(); var b = str.toUpperCase(); return ((a == b) ? 0 : ((a > b) ? 1 : -1));
localeCompare()
работает медленно , поэтому, если вас не волнует "правильный" порядок строк неанглийских символов, попробуйте свой оригинальный метод или более понятный на вид:Это на порядок быстрее, чем
localeCompare()
на моей машине.В
+
гарантирует , что ответ всегда числовой , а не логическое значение.источник
(str1 > str2) - (str1 < str2)
Использование:
strcmp(string1, string2)
Результат:
1
означает, что строка1 больше,0
означает равна,-1
означает, что строка2 больше.Это имеет более высокую производительность, чем
String.prototype.localeCompare
Кроме того,
numeric:true
делает логическое сравнение чиселисточник
Как насчет:
Затем, чтобы сравнить s1 с 2:
источник