有两种基本方式:
var arr = [{name:"ABC"},{name:"BAC"},{name:"abc"},{name:"bac"}];
arr.sort(function(a,b){
var alc = a.name.toLowerCase(), blc = b.name.toLowerCase();
return alc > blc ? 1 : alc < blc ? -1 : 0;
});
或
arr.sort(function(a,b){
return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
});
注意第二个版本忽略了变音符号,所以a和à会被排序为同一个字母。
现在这两种方式的问题是它们不会将大写ABC排在小写abc之前,因为它会将它们视为相同。
要解决这个问题,您必须这样做:
arr.sort(function(a,b){
var alc = a.name.toLowerCase(), blc = b.name.toLowerCase();
return alc > blc ? 1 : alc < blc ? -1 : a.name > b.name ? 1 : a.name < b.name ? -1 : 0;
});
如果您不希望变音符号像这样影响排序,您可以选择使用 localeCompare 来代替:
arr.sort(function(a,b){
var lccomp = a.name.toLowerCase().localeCompare(b.name.toLowerCase());
return lccomp ? lccomp : a.name > b.name ? 1 : a.name < b.name ? -1 : 0;
});
您可以在此处阅读有关排序的更多信息:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort