jquery .sort区分大小写

时间:2014-02-28 12:02:11

标签: javascript jquery

我想按字母顺序对数组进行排序(无论是大写字母还是低位字母)。
例如b,C,​​A应该变为A,b,C。 br /> 但是由于.sort是区分大小写的(用ASCII表示),它变成A,C,b< br />

var myArray = [ 'b', 'A', 'C' ];
myArray.sort();
console.log(myArray);

链接到小提琴:http://jsfiddle.net/x93N8/

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

你可以这样做:

myArray.sort(function(a,b){
   a = a.toLowerCase(); b = b.toLowerCase();
   return a>b ? 1 : a==b ? 0 : -1;
});

答案 1 :(得分:2)

在sort函数中比较它们时,你需要小写字符串,如下所示:

var myArray = [ 'b', 'A', 'C' ];
myArray.sort(function(a,b){
    var alc = a.toLowerCase(), blc = b.toLowerCase();
    return alc > blc ? 1 : alc < blc ? -1 : 0;
});

引用ECMAScript 5规范:

  

15.4.4.11 Array.prototype.sort(comparefn)
  该数组的元素已排序。排序不一定稳定(即,元素   比较平等不一定保持原来的顺序)。如果   comparefn未定义,它应该是一个接受两个的函数   参数x和y如果x&lt;则返回负值。 y,如果x =则为零   y,如果x>,则为正值;收率

您可以在此处找到完整的ECMAScript规范:http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf并阅读有关排序的所有信息,请参阅第140页。

您还可以在此处阅读排序方法:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

您可以在此处查看更新的小提琴:http://jsfiddle.net/x93N8/2/

答案 2 :(得分:0)

myArray.sort(
    function(a, b) {
    if (a.toLowerCase() < b.toLowerCase()) return -1;
    if (a.toLowerCase() > b.toLowerCase()) return 1;
    return 0;
    }
);

租赁说明我最初写这篇文章是为了说明技术,而不是考虑到性能。请参阅@Ivan Krechetov的答案以获得更紧凑的解决方案。