繁体   English   中英

jQuery .sort区分大小写

[英]jquery .sort case sensitive

我想按字母顺序对字符串数组进行排序(无论大写还是小写)。
例如,b,C,A应该变为A,b,C。但是由于.sort区分大小写(使用ASCII格式),因此它变成了A,C,b <br />

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

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

我怎样才能解决这个问题?

你可以这样做 :

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

在排序函数中比较字符串时,您需要将其小写:

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 <y,则返回负值;如果x = y,则返回零;如果x> y,则返回正值。

您可以在这里找到完整的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/

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM