我有一个需要在 JavaScript 中排序的字符串数组,但不区分大小写。如何执行此操作?
如何在 JavaScript 中执行不区分大小写的字符串排序数组?
IT技术
javascript
sorting
case-insensitive
2021-02-01 19:11:55
6个回答
在(几乎:) 单行
["Foo", "bar"].sort(function (a, b) {
return a.toLowerCase().localeCompare(b.toLowerCase());
});
这导致
[ 'bar', 'Foo' ]
尽管
["Foo", "bar"].sort();
结果是
[ 'Foo', 'bar' ]
是时候重新审视这个老问题了。
您不应该使用依赖于toLowerCase
. 它们效率低下,并且在某些语言(例如土耳其语)中根本不起作用。更喜欢这个:
['Foo', 'bar'].sort((a, b) => a.localeCompare(b, undefined, {sensitivity: 'base'}))
检查浏览器兼容性的文档以及有关该sensitivity
选项的所有信息。
myArray.sort(
function(a, b) {
if (a.toLowerCase() < b.toLowerCase()) return -1;
if (a.toLowerCase() > b.toLowerCase()) return 1;
return 0;
}
);
编辑: 请注意,我最初写这个是为了说明技术而不是考虑性能。另请参阅回答@Ivan Krechetov 以获得更紧凑的解决方案。
arr.sort(function(a,b) {
a = a.toLowerCase();
b = b.toLowerCase();
if (a == b) return 0;
if (a > b) return 1;
return -1;
});
您还可以使用新的Intl.Collator().compare
,每个 MDN在排序数组时效率更高。缺点是旧浏览器不支持它。MDN 声明它在 Safari 中完全不受支持。需要验证它,因为它声明Intl.Collator
支持。
比较大量字符串时,例如对大型数组进行排序时,最好创建一个 Intl.Collator 对象并使用其 compare 属性提供的函数
["Foo", "bar"].sort(Intl.Collator().compare); //["bar", "Foo"]
其它你可能感兴趣的问题