Хтось може це підтвердити для мене? У JavaScript немає версії strcmp (), тому вам доведеться виписати щось на зразок:
( str1 < str2 ) ?
-1 :
( str1 > str2 ? 1 : 0 );
Хтось може це підтвердити для мене? У JavaScript немає версії strcmp (), тому вам доведеться виписати щось на зразок:
( str1 < str2 ) ?
-1 :
( str1 > str2 ? 1 : 0 );
Відповіді:
А як на рахунок
str1.localeCompare(str2)
localeCompare()
іноді поводиться по-різному в кожному браузері.
У JavaScript немає, як ви зазначаєте.
Швидкий пошук:
function strcmp ( str1, str2 ) {
// http://kevin.vanzonneveld.net
// + original by: Waldo Malqui Silva
// + input by: Steve Hilder
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + revised by: gorthaur
// * example 1: strcmp( 'waldo', 'owald' );
// * returns 1: 1
// * example 2: strcmp( 'owald', 'waldo' );
// * returns 2: -1
return ( ( str1 == str2 ) ? 0 : ( ( str1 > str2 ) ? 1 : -1 ) );
}
від http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strcmp/
Звичайно, ви можете просто додати localeCompare, якщо потрібно:
if (typeof(String.prototype.localeCompare) === 'undefined') {
String.prototype.localeCompare = function(str, locale, options) {
return ((this == str) ? 0 : ((this > str) ? 1 : -1));
};
}
І користуйтеся str1.localeCompare(str2)
скрізь, не турбуючись про те, що місцевий веб-переглядач поставляється з ним. Єдина проблема полягає в тому, що вам доведеться додати підтримку, locales
іoptions
якщо ви переймаєтесь цим.
==
використовується, а не ===
тому, що останні уникають перетворення типу, а значить, мікросекунда швидша.
var a = this.toUpperCase(); var b = str.toUpperCase(); return ((a == b) ? 0 : ((a > b) ? 1 : -1));
localeCompare()
повільно , тому якщо вам не байдуже "правильне" впорядкування рядків, що не містять англійської мови, спробуйте свій оригінальний метод чи вигляд, що виглядає чистіше:
str1 < str2 ? -1 : +(str1 > str2)
Це на порядок швидше, ніж localeCompare()
на моїй машині.
У +
гарантує , що відповідь завжди числовий , а не логічне значення.
(str1 > str2) - (str1 < str2)
var strcmp = new Intl.Collator(undefined, {numeric:true, sensitivity:'base'}).compare;
Використання: strcmp(string1, string2)
Результат: 1
означає, що string1 більший, 0
означає рівний, -1
означає, що string2 більший.
Це має більш високі показники, ніж String.prototype.localeCompare
Крім того, numeric:true
змушує логічне порівняння чисел
Як щодо:
String.prototype.strcmp = function(s) {
if (this < s) return -1;
if (this > s) return 1;
return 0;
}
Потім, щоб порівняти s1 з 2:
s1.strcmp(s2)