我有一个字符串数组,我需要在JavaScript中排序,但以不区分大小写的方式。如何做到这一点?


当前回答

在(几乎:)一行代码中

["Foo", "bar"].sort(function (a, b) {
    return a.toLowerCase().localeCompare(b.toLowerCase());
});

结果是

[ 'bar', 'Foo' ]

["Foo", "bar"].sort();

结果

[ 'Foo', 'bar' ]

其他回答

用. tolowercase()规范.sort()中的case。

ES6版本:

["Foo", "bar"].sort(Intl.Collator().compare)

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Collator/compare

如果不管输入数组中元素的顺序如何,你都想保证相同的顺序,这里是一个稳定排序:

myArray.sort(function(a, b) {
    /* Storing case insensitive comparison */
    var comparison = a.toLowerCase().localeCompare(b.toLowerCase());
    /* If strings are equal in case insensitive comparison */
    if (comparison === 0) {
        /* Return case sensitive comparison instead */
        return a.localeCompare(b);
    }
    /* Otherwise return result */
    return comparison;
});

现在是时候重新审视这个老问题了。

您不应该使用依赖toLowerCase的解决方案。它们效率很低,而且在某些语言(例如土耳其语)中根本不起作用。喜欢这个:

['Foo', 'bar'].sort((a, b) => a.localeCompare(b, undefined, {sensitivity: 'base'}))

查看浏览器兼容性文档,了解灵敏度选项的所有信息。

在/ /i中包装字符串。这是使用正则表达式忽略大小写的一种简单方法