Для сортировки массивов в JavaScript есть метод sort(), сортирует массив к которому он применен. Так что если вам нужен исходный массив, то сделайте копию. Метод sort() сортирует элементы как будто это строки. Так например числовой массив он отсортирует вот так:
var arr = [ 1, 4, 11, 7, 19, 22 ]; arr.sort(); alert(arr); // 1,11,19,22,4,7
Но что если нам надо отсортировать массив по другим правилам? Например отсортировать массив строк или отсортировать массив объектов по свойству, что тогда?
Функция sort() принимает необязательный параметр — функцию сравнения(назовем ее userCompare(a,b)), которая будет сравнивать два элемента массива. Функция будет возвращать положительное значение если первый параметр больше второго, отрицательное если первый параметр меньше второго, нулевое в случае равенства параметров. Например если нам надо отсортировать массив объектов по полю или другому хитрому критерию, то мы можем описать эти правила внутри нашей функции, приведем пример.
function userCompare(a,b) { var r=0; if (a.property > b.property) { r = 1; } if (a.property < b.property) { r = -1; } return r; }
Поскольку в JavaScript строки сравниваются посимвольно, эта функция подойдет для сортировки массивов объектов по полю, как числовому так и строковому. Чтобы ее использовать надо только не забыть изменить имя свойства на на нужное вам. Вот пример как сортировать массив пользователей по фамилии:
function userCompare(a,b) { var r=0; if (a.surname > b.surname) { r = 1; } if (a.surname < b.surname) { r = -1; } return r; } var users = []; users.push({name:'Nikolay', surname:'Sidorov', age:20}); users.push({name:'Andrey', surname:'Petrov', age:30}); users.push({name:'Petr', surname:'Ivanov', age:40}); users.push({name:'Ivan', surname:'Kovalenko', age:50}); users.push({name:'Nikolay', surname:'Gogol', age:60}); function printUsers(){ var users_size = users.length; for (i=0; i < users_size; i++) { console.log('%s %s %d years',users[i].surname,users[i].name,users[i].age); } } console.log("Массив до сортировки:"); console.log(users); printUsers(); // красивый вывод users.sort(userCompare); // сортируем массив console.log("Массив после сортировки:"); console.log(users); printUsers();
Для более правильного сравнения строк читайте про localeCompare().