- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
请参阅以下最小示例。所有示例都在 Chrome 76.0.3809.100、Firefox 68.0.2 和 Node.js 11.15.0 中进行了测试。所有结果都相同。
为了完整起见,提供了所有相关选项(但它们并不真正重要:默认的 sensitivity
是 'variant'
,其工作方式几乎相同作为无重音字符的 'case'
,使用默认的 'sort'
用法。
没有设置能够解决下面详述的矛盾。我也尝试了几种语言选项,但无济于事。
示例 1.
以下是正确的:'a'
出现在 'b'
之前。
const result = 'a'.localeCompare('b', 'en', {
sensitivity: 'case',
usage: 'sort',
caseFirst: 'lower'
});
// -1
示例 2.
以下是正确的:设置了 caseFirst: 'lower'
后,'b'
出现在 'B'
之前。
const result = 'b'.localeCompare('B', 'en', {
sensitivity: 'case',
usage: 'sort',
caseFirst: 'lower'
});
// -1
示例 3.
以下也是正确的。 caseFirst
选项不需要被实现支持,但它是。设置了 caseFirst: 'upper'
后,'b'
出现在 'B'
之后。
const result = 'b'.localeCompare('B', 'en', {
sensitivity: 'case',
usage: 'sort',
caseFirst: 'upper'
});
// 1
示例 4.
以下也是正确的。因为 'b'
出现在 'B'
之前,所以 'b{anything}'
出现在 'B{anything}'
:
const result = 'ba'.localeCompare('Ba', 'en', {
sensitivity: 'case',
usage: 'sort',
caseFirst: 'lower'
});
// -1
示例 5.
我认为以下 1
结果不正确,因为它与 'b{anything}'
出现在 'B 之前相矛盾{anything}'
语句:
const result = 'bb'.localeCompare('Ba', 'en', {
sensitivity: 'case',
usage: 'sort',
caseFirst: 'lower'
});
// 1
据此,'bb'
出现在 'Ba'
之后。设置 sensitivity: 'base'
(比较不区分大小写)或 caseFirst: 'upper'
(它们产生相同的 1
使用这些设置输出——正确——我试过了)。
但使用此设置,我希望得到 -1
结果:'bb'
出现在 'Ba'
之前,因为它们按字母顺序排在第一个字母、'b'
和 'B'
决定了它们的顺序('b'
在 'B'
之前,如示例 2. 所示)。
为什么 localeCompare
会这样?
最佳答案
它实际上不是那样工作的,因为它比较所有而不是字符串的字母位置与它们的字母位置。
您可以解决并将每个字母与另一个字符串中的一个进行比较(也许这还需要处理最小长度字母)。
var array = ['a', 'b', 'bb', 'Bb', 'ba', 'BA', 'B', 'bA'];
array.sort();
console.log(...array);
array.sort((a, b) => a.localeCompare(b, 'kf', { sensitivity: 'case', caseFirst: 'lower' }));
console.log(...array);
array.sort((a, b) => {
var r;
Array.from(a).some((c, i) => r = c.localeCompare(b[i], 'kf', { sensitivity: 'case', caseFirst: 'lower' }));
return r;
});
console.log(...array);
关于javascript - String.prototype.localeCompare 处理大小写不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57671159/
我正在开发一个漫画书阅读器,我有一些用户上传的文件(图像)(文件对象),我正在使用它们的文件名以正确的顺序对它们进行排序。 我尝试使用 localeCompare对它们进行自然排序,但没有运气....
我使用 JS 和 jQuery 对我的表格进行排序,这是我对表格进行排序的代码 function sortTable(table, column, order) { var asc =
这个问题已经有答案了: Why doesn't my arrow function return a value? (1 个回答) 已关闭 3 年前。 我的问题类似于 this ,但不一样。 我正在尝
我正在使用 localCompare 来比较一些字符串,这些字符串是数字。我希望订单是数字。我怎样才能做到这一点? 排序功能: requestAmountEl.find('optgroup').eac
我正在尝试对包含 lastName 和 firstName 属性的对象数组进行排序。我希望对象按 asc 顺序按 lastName 排序,如果对象具有相同的 lastName。 下面是我需要的排序顺序
我现在正在使用 javascript string 使用 localeCompare 进行排序,我的数据也将包含多个 null 值. 在比较 string 和 null 值时,我发现 localeCo
localeCompare() 应该返回(-1、0 或 1),但是,以下代码在我的 PC 浏览器 Chrome 53 上返回“1”(如预期),但在我的手机浏览器上返回“-8” Samsung Inte
在最新的 Firefox 和 Chrome 中测试(在我的系统上有一个“de”语言环境): "Ä".localeCompare("A") 给我 1,这意味着它认为 "Ä" 应该按排序顺序出现在之后 "
我在用捷克名字对数组进行排序时遇到问题。它适用于普通字符,但不适用于特殊字符。 'Sb', 'St', 'Šk' ;特殊的 Š 应该在其他两个词之后,但它以不同的顺序结束。这是一个简单的代码。 var
尝试使用 ES6 arrayObj.sort(a,b) => a.property.localeCompare(b.property)语法但出现错误: TypeError: a.property.lo
我有以下代码: const test = "true"; console.log(test.localeCompare("true", undefined, { sensitivity: 'base'
我一直在尝试在控制台上编写这段代码: 'B'.localeCompare('a') 我一直从中得到“1”,尽管 ascii“a”更大所以我应该得到 -1。 我试图寻找任何一致性,但没有成功。 如果能清
我正在尝试从最低值到最高值对数组进行排序。 下面的示例显示它已按这种方式排序 var array = ["-394","-275","-156","-37","82","201","320","439
我正在使用 React ant design table .在该表中,我尝试使用 localeCompare 对空值进行排序,它显示类型错误。 JSON const data = [{ key:
首先我安装了 nodemailer 然后它显示没有正确配置。之后我将它更新到 nodemailer 0.7.1 然后它显示找不到 mimelib 模块。然后我再次尝试重新安装 nodemailer 然
我尝试按字母顺序对数组数据进行排序,但我认为有些地方不对。 var items; // it's OK items = ['a', 'á']; items.sort((a, b) => a.loca
我正在尝试使用 JavaScript 的 localeCompare字符串排序函数。 我对在 devTools 控制台中运行以下行的结果感到惊讶: "a".localeCompare("b") //
当我对我的数组进行排序时,我在控制台中收到以下错误: Uncaught TypeError: Cannot read property 'localeCompare' of null 到目前为止我尝试
这个问题已经有答案了: 400x Sorting Speedup by Switching a.localeCompare(b) to (ab?1:0)) (5 个回答) 已关闭 4 年前。 我正在按
我正在尝试创建一个比较器,它对于大于、小于和等于返回 true 或 false。我发现 localeCompare 函数比较 2 个字符串并返回 1,0 或 -1。我尝试返回 true 或 false
我是一名优秀的程序员,十分优秀!