Ответ 1
Существует два основных способа:
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