我想按字母顺序对数组进行排序(无论是大写字母还是低位字母)。
例如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/
我该如何解决这个问题?
答案 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的答案以获得更紧凑的解决方案。