JavaScript 中的序号字符串比较
Ordinal string compare in JavaScript?
在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");
- 反向字符串比较
- ExpressJS:奇怪的字符串比较
- 宽松的字符串比较
- 在angularJS中用字符串比较检查Json对象
- 在JavaScript中使用===进行字符串比较有意义吗
- 字符串比较显示从flash[:alert]检索到的字符串上的错误
- JSLint字符串比较错误应为'==='而是看到'=='
- 字符串比较在d3.rgb中不起作用
- 为什么这个字符串比较在Jest的期望中没有失败
- jQuery this.href 字符串比较不起作用
- 字符串比较不起作用
- 字符串比较与预期不符
- Javascript中的字符串比较不起作用
- 正则表达式(字符串比较)
- j查询字符串比较变量
- 字符串比较 JavaScript 中的失败
- 当字符串中存在空格时,字符串比较会给出错误的输出
- Ant JavaScript 相同的字符串比较给出了错误的结果,但 char compare 给出了字符串中每个字符的
- 正则表达式字符串比较忽略符号
- JavaScript 中的序号字符串比较