在 JavaScript 中:
"Id".localeCompare("id")
将报告“id”更大。我想做序数(不是语言环境)比较,以使“Id”更大。这类似于 C# 中的 String.CompareOrdinal。我该怎么做?
在 JavaScript 中:
"Id".localeCompare("id")
将报告“id”更大。我想做序数(不是语言环境)比较,以使“Id”更大。这类似于 C# 中的 String.CompareOrdinal。我该怎么做?
我支持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”,这与我们之前得到的结果相同。
只是一个猜测:通过反转所有字母的大小写?
正如 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
快乐编码。
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");