Сортировка таблиц

Известно, что в Javascript у объекта Array есть метод sort, который сортирует элементы одномерного массива. На практике иногда нужно отсортировать таблицу по определённому столбцу. В одном из проектов я решил эту задачу следующим образом.

Таблицу реализуем с помощью массива из объектов. Теперь для сортировки такой таблицы нужно передать методу sort функцию сравнения. Эта функция должна возвращать 0 для элементов с одинаковыми значениями, положительное значение - если первый элемент больше второго и отрицательное значение - если первый элемент меньше второго.

Напишем функцию, которая будет возвращать функцию для сортировки в зависимости от параметров.

function orderBy(col) {
  var param = (orderBy.arguments.length == 2) && (orderBy.arguments[1] == 'desc') ? -1 : 1;
  return function (a, b) {
  if (a[col] == b[col]) {
  return 0;
  } else if (a[col] > b[col]) {
  return param;
  } else {
  return -param;
  }
  }
}

Синтаксис
orderBy(col [, direction])

Параметры
col - имя столбца (свойство объекта), по которому нужно отсортировать таблицу
direction - направление сортировки. 'asc' - для сортировки по возрастанию, 'desc' - для сортировки по убыванию. Если direction не задан, то сортировка будет по возрастанию.

Пример использования

var table = [
  {
  'key': 'red',
  'value': 2
  },
  {
  'key': 'blue',
  'value': 8
  },
  {
  'key': 'green',
  'value': 90
  },
  {
  'key': 'white',
  'value': 3
  }
];

table.sort(orderBy('value'));
/*
Сортировка по полю value по возрастанию

Таблица примет вид:
[
  {
  'key': 'red',
  'value': 2
  },
  {
  'key': 'white',
  'value': 3
  },
  {
  'key': 'blue',
  'value': 8
  },
  {
  'key': 'green',
  'value': 90
  }
];
*/

table.sort(orderBy('key', 'desc'));
/*
Сортировка по полю key по убыванию

Таблица примет вид:
[
  {
  'key': 'white',
  'value': 3
  },
  {
  'key': 'red',
  'value': 2
  },
  {
  'key': 'green',
  'value': 90
  },
  {
  'key': 'blue',
  'value': 8
  }
];
*/

7 Ноября 2008 г.