136

任何人都可以为我验证这一点吗?JavaScript 没有 strcmp() 的版本,所以你必须写出类似的内容:

 ( str1 < str2 ) ? 
            -1 : 
             ( str1 > str2 ? 1 : 0 );
4

6 回答 6

148

关于什么

str1.localeCompare(str2)
于 2009-07-24T18:38:08.400 回答
42

正如您所指出的,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如果你关心它,你必须添加对它的支持。

于 2009-07-24T18:34:00.547 回答
27

localeCompare()很慢,所以如果您不关心非英文字符串的“正确”顺序,请尝试使用原始方法或更简洁的方法:

str1 < str2 ? -1 : +(str1 > str2)

这比localeCompare()我的机器快一个数量级。

+确保答案始终是数字而不是布尔值。

于 2013-07-20T18:10:00.743 回答
5
var strcmp = new Intl.Collator(undefined, {numeric:true, sensitivity:'base'}).compare;

用法:strcmp(string1, string2)

结果:1表示 string1 较大,0表示相等,-1表示 string2 较大。

这个性能比String.prototype.localeCompare

此外,numeric:true使其进行逻辑数字比较

于 2019-01-16T04:20:45.553 回答
0

来自这篇如何在 JavaScript文章中检查两个字符串是否相等:

  1. 通常,如果您的字符串仅包含 ASCII 字符,则使用===运算符来检查它们是否相等。
  2. 但是,当您的字符串包含包含组合字符(例如e + ◌́ = é)的字符时,您首先将它们标准化,然后再比较相等性,如下所示 - s1.normalize() === s2.normalize()
于 2021-05-26T04:49:25.507 回答
-1

怎么样:

String.prototype.strcmp = function(s) {
    if (this < s) return -1;
    if (this > s) return 1;
    return 0;
}

然后,将 s1 与 2 进行比较:

s1.strcmp(s2)
于 2013-06-12T14:55:45.213 回答