JavaScript 中的序号字符串比较

Ordinal string compare in JavaScript?

本文关键字:字符串 比较 JavaScript      更新时间:2023-09-26

在javascript中:

"Id".localeCompare("id")

将报告"ID"更大。我想做序号(不是区域设置(比较,以便"Id"更大。这类似于 C# 中的 String.CompareOrdinal。我该怎么做?

我支持Raymond Chen和pst给出的答案。我将用我最喜欢的网站 - Mozilla 开发者网络(Mozilla Developer Network(中的文档来支持它们,以获取 JavaScript 问题的答案。顺便说一句,我强烈推荐这个网站来回答你未来可能遇到的任何JavaScript问题。

现在,如果你转到标题为字符串的MDN部分,在"比较字符串"部分下,你会发现这样的描述:

C 开发人员有 strcmp(( 函数来比较字符串。在 JavaScript 中,你只需使用小于和大于运算符:

var a = "a";  
var b = "b";  
if (a < b) // true  
  print(a + " is less than " + b);  
else if (a > b)  
  print(a + " is greater than " + b);  
else  
  print(a + " and " + b + " are equal.");

使用字符串实例继承的 localeCompare 方法可以实现类似的结果。

如果我们使用字符串"Id"表示a,使用"id"表示b那么我们将得到以下结果:

"Id is less than id"

这与Yaron之前使用localeCompare方法时得到的结果相同。如 MDN 中所述,使用小于和大于运算符会产生与使用 localeCompare 类似的结果。

因此,Yaron问题的答案是使用小于(<(和大于(>(运算符对JavaScript中的字符串进行序号比较。

由于Yaron提到了C#方法String.CompareOrdinal,我想指出这种方法产生的结果与上面的JavaScript完全相同。根据 MSDN C# 文档,String.CompareOrdinal(String, String)方法"通过计算每个字符串中相应 Char 对象的数值来比较两个指定的字符串对象"。因此,使用各个字符的数字 (ASCII( 值比较两个字符串参数。

如果我们在 C# 中使用 Yaron Naveh 的原始示例,我们有:

int result = String.CompareOrdinal("Id", "id");

result 的值是一个小于零的int,并且可能是-32的,因为"I"(0x49(和"i"(0x69(之间的差异是-0x20 = -32。因此,在词法上"Id"小于"id",这与我们之前得到的结果相同。

正如 Raymond 在评论中指出(并解释(的那样,"序号"非区域设置感知比较就像在字符串上使用各种相等运算符一样简单(只需确保两个操作数都是字符串(:

"a" > "b" // false 
"b" > "a" // true

为了有点花哨(或者不要用[[原型]],功能是一样的(:

String.prototype.compare = function (a, b) {
    return ((a == b ? 0)
        ? (a > b : 1)
        : -1)
}

然后:

"a".compare("b") // -1

快乐编码。

只是一个猜测:通过反转所有字母的大小写?

function compareOrdinal(ori,des){
    for(var index=0;index<ori.length&&index<des.length;index++){
        if(des[index].charCodeAt(0)<ori[index].charCodeAt(0)){
            return -1;
            break;
        }
    }
    if(parseInt(index)===des.length-1){
        return 0;
    }
    return 1;
}
compareOrdinal("idd","id");//output 1

如果您需要比较并找到两个字符串之间的差异,请检查以下内容:

function findMissingString() {
    var str1 = arguments[0];
    var str2 = arguments[1];
    var i = 0 ;
    var j = 0 ;
    var text = '' ;
    while(i != (str1.length >= str2.length ? str1.length : str2.length )) {
        if(str1.charAt(i) == str2.charAt(j)) {
            i+=1 ;
            j+=1;
        } else {
            var indexing =  (str1.length >= str2.length ? str1.charAt(i) : str2.charAt(j));
            text = text + indexing ;
            i+=1;
            j+=1;
        }
    }
    console.log("From Text = " + text);
}
findMissingString("Hello","Hello world");