Показать сообщение отдельно
  #4 (permalink)  
Старый 27.07.2011, 17:17
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

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"));


ЗЫ: данный вариант не совсем "правильный", т.к. результирующая функция замыкается на внешней, т.е. потенциальна течёт память, но это можно исправить, если например обе функции сделать методом одного объекта, а связь между ними - через публичные свойства.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 27.07.2011 в 17:41.
Ответить с цитированием