JavaScript 中将 .NET 中的字符串与序数忽略大小写进行比较的等效项是什么?

问题描述 投票:0回答:1

在 .NET 中,我们能够使用 序数比较 同时忽略大小写来比较字符串。 这是字符串比较的最佳实践,特别是当可能涉及多种文化时。

我正在寻找 JavaScript 中的完全相同的东西。关于 JS 字符串比较有很多答案,但我找不到太多关于序数比较的答案,更不用说这样做并忽略大小写了。我确实找到了这个关于以序数方式比较字符串而不忽略大小写的问题,但不清楚我将如何做到这一点同时忽略大小写,所以我认为这是一个根本不同的问题(因此我的新问题在这里) .

如何在 JavaScript 中以序数方式比较字符串,同时忽略大小写,就像在 .NET 中一样?

javascript .net string string-comparison case-sensitive
1个回答
0
投票

在 javascript 中可以通过两种方式实现这一点:

  1. 使用
    <
    >
    运算符比较字符串(它们执行序数比较),在此之前使用
    .toLowerCase
    .toUpperCase
    不区分大小写。
  2. 编写一个自定义方法,获取字符串中每个字符的 ASCII 值作为数字并手动进行比较。您可以使用
    string.charCodeAt(index)
    方法在 javascript 中实现此目的。这会返回 UTF-16 字符集的索引,但是前 128 个代码点在 UTF-16 和 ASCII 之间共享,这应该不是问题,除非您需要扩展 ASCII...

这可以这样实现:

function compareStringOrdinalIgnoreCase(str1, str2) {
  str1 = str1.toUpperCase()
  str2 = str2.toUpperCase()
  for (let i = 0; i < Math.min(str1.length, str2.length); i++) {
    const charCode1 = str1.charCodeAt(i);
    const charCode2 = str2.charCodeAt(i);

    if (charCode1 < charCode2) {
      return -1;
    } else if (charCode1 > charCode2) {
      return 1;
    }
  }

  if (str1.length < str2.length) {
    return -1;
  } else if (str1.length > str2.length) {
    return 1;
  }

  return 0;
}
console.log(compareStringOrdinalIgnoreCase("Id", "id"))

© www.soinside.com 2019 - 2024. All rights reserved.