4

在 JavaScript 中:

"Id".localeCompare("id")

将报告“id”更大。我想做序数(不是语言环境)比较,以使“Id”更大。这类似于 C# 中的 String.CompareOrdinal。我该怎么做?

4

5 回答 5

5

我支持Raymond Chen和pst给出的答案。我将使用我最喜欢的站点(Mozilla 开发者网络)中的文档来支持它们,以获得 JavaScript 问题的答案。顺便说一句,我强烈推荐这个网站来解决您将来可能遇到的任何 JavaScript 问题。

现在,如果您转到 MDN 标题为String的部分,在“比较字符串”部分下,您会发现以下描述:

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.");

使用 String 实例继承的 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 对象的数值来比较两个指定的 String 对象。” 因此,使用各个字符的数字 (ASCII) 值比较两个字符串参数。

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

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

result的值int小于零,可能是-32因为“I”(0x49)和“i”(0x69)之间的差异是-0x20 = -32。所以,词法上“Id”小于“id”,这与我们之前得到的结果相同。

于 2012-05-17T14:49:12.180 回答
1

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

于 2012-05-17T13:49:58.290 回答
1

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

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

有点花哨(或者不要乱用[[prototype]],功能是一样的):

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

然后:

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

快乐编码。

于 2012-05-17T13:52:45.807 回答
0
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
于 2012-05-17T14:07:27.450 回答
-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");

于 2016-07-01T13:40:08.797 回答