Сортировка таблиц
Известно, что в 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
}
];
*/