是否有一个JavaScript的strcmp()?(Is there a JavaScript st

2019-06-17 15:26发布

任何人都可以验证这一点给我吗? JavaScript并没有一个版本的strcmp()的,所以你要写出类似:

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

Answer 1:

关于什么

str1.localeCompare(str2)


Answer 2:

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)无处不在,而不必担心阉本地浏览器已随它。 唯一的问题是,你必须添加支持localesoptions ,如果你关心这个。



Answer 3:

localeCompare()是缓慢的 ,所以如果你不关心非英语字符字符串的“正确”的排序,试试你原来的方法或清洁的前瞻性:

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

这是一个数量级的速度比localeCompare()我的机器上。

+保证答案永远是数字,而不是布尔值。



Answer 4:

var strcmp = new Intl.Collator(undefined, {numeric:true, sensitivity:'base'}).compare;

用法: strcmp(string1, string2)

结果: 1意味着字符串1是更大的, 0是指相等, -1意味着字符串2是更大的。

这比更高的性能String.prototype.localeCompare

此外, numeric:true使得它做的逻辑数比较



Answer 5:

怎么样:

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

然后,比较S1以2:

s1.strcmp(s2)


文章来源: Is there a JavaScript strcmp()?