function sortBy (field, rev, fn) {
field = field || false;
rev = rev ? rev === true ? -1 : 1 : 1;
fn = fn || false;
return function (a, b) {
if (field) {
a = a[field];
b = b[field];
}
if (fn) {
a = fn(a);
b = fn(b);
}
if (a < b) { return rev * -1; }
if (a > b) { return rev; }
return false;
}
}
field - поле по которому идёт сортировка, rev - реверсия массива, fn - функция callback для доп действий
Пример вызова:
myArray.sort(sortBy("name"));
ЗЫ: данный вариант не совсем "правильный", т.к. результирующая функция замыкается на внешней, т.е. потенциальна течёт память, но это можно исправить, если например обе функции сделать методом одного объекта, а связь между ними - через публичные свойства.