我有一个字符串数组,我需要在JavaScript中排序,但以不区分大小写的方式。如何做到这一点?
当前回答
arr.sort(function(a,b) {
a = a.toLowerCase();
b = b.toLowerCase();
if (a == b) return 0;
if (a > b) return 1;
return -1;
});
其他回答
在/ /i中包装字符串。这是使用正则表达式忽略大小写的一种简单方法
在(几乎:)一行代码中
["Foo", "bar"].sort(function (a, b) {
return a.toLowerCase().localeCompare(b.toLowerCase());
});
结果是
[ 'bar', 'Foo' ]
而
["Foo", "bar"].sort();
结果
[ 'Foo', 'bar' ]
用. tolowercase()规范.sort()中的case。
我把上面的答案包装在一个填充中,这样我就可以在字符串数组上调用.sortIgnoreCase()
// Array.sortIgnoreCase() polyfill
if (!Array.prototype.sortIgnoreCase) {
Array.prototype.sortIgnoreCase = function () {
return this.sort(function (a, b) {
return a.toLowerCase().localeCompare(b.toLowerCase());
});
};
}
为了支持已接受的答案,我想补充一点,下面的函数似乎改变了原始数组中的值,以便不仅对小写进行排序,而且大写值也将被更改为小写。这对我来说是一个问题,因为即使我希望看到玛丽在玛丽旁边,我也不希望第一个值玛丽的大小写改为小写。
myArray.sort(
function(a, b) {
if (a.toLowerCase() < b.toLowerCase()) return -1;
if (a.toLowerCase() > b.toLowerCase()) return 1;
return 0;
}
);
在我的实验中,下面的函数从接受的答案正确排序,但没有改变值。
["Foo", "bar"].sort(function (a, b) {
return a.toLowerCase().localeCompare(b.toLowerCase());
});