Home > Веб-разработка > JavaScript сортировка массива объектов

JavaScript сортировка массива объектов

Для сортировки массивов в 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().

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

?

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackbacks:0

Listed below are links to weblogs that reference
JavaScript сортировка массива объектов from EchoBlog::howToCode
TOP