Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.04.2013, 23:35
Новичок на форуме
Отправить личное сообщение для Ilja_Lv Посмотреть профиль Найти все сообщения от Ilja_Lv
 
Регистрация: 01.04.2013
Сообщений: 3

Непонятный момент в примере функции сравнения
Добрый день!

На stackoverflow нашёл пример функции, которая передаётся в .sort():
var sort_by = function(field, reverse, primer){
    var key = primer ? function (x) { return primer(x[field]); } : function (x) { return x[field]; };

    return function (a,b) {
        var A = key(a), B = key(b);
        return ((A < B) ? -1 : (A > B) ? +1 : 0) * [-1,1][+!!reverse];                  
    };
};


Применение:
// Sort by price high to low
homes.sort(sort_by('price', true, parseInt));

// Sort by city, case-insensitive, A-Z
homes.sort(sort_by('city', false, function(a){return a.toUpperCase()}));



Помогите, пожалуйста, понять, что означает вот это выражение:
* [-1,1][+!!reverse];

Спасибо!

Последний раз редактировалось Ilja_Lv, 01.04.2013 в 23:36. Причина: Хочу получать уведомления на email.
Ответить с цитированием
  #2 (permalink)  
Старый 02.04.2013, 00:17
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

1) !! - приводит значение переменной к Boolean: true or false;
2) + - приводит значение к Number, т.к. применяется к Boolean, то результат 0 or 1;
3) берем либо элемент массива с индексом = 0 or 1;
Ответить с цитированием
  #3 (permalink)  
Старый 02.04.2013, 00:52
Новичок на форуме
Отправить личное сообщение для Ilja_Lv Посмотреть профиль Найти все сообщения от Ilja_Lv
 
Регистрация: 01.04.2013
Сообщений: 3

Сообщение от nikita.mmf Посмотреть сообщение
1) !! - приводит значение переменной к Boolean: true or false;
2) + - приводит значение к Number, т.к. применяется к Boolean, то результат 0 or 1;
3) берем либо элемент массива с индексом = 0 or 1;
Т.е., если я правильно понял, результат ((A < B) ? -1 : (A > B) ? +1 : 0) будет умножатся на 1 или -1, в зависимости от состояния reverse?
Ответить с цитированием
  #4 (permalink)  
Старый 02.04.2013, 01:07
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

Сообщение от Ilja_Lv Посмотреть сообщение
Т.е., если я правильно понял, результат ((A < B) ? -1 : (A > B) ? +1 : 0) будет умножатся на 1 или -1, в зависимости от состояния reverse?
Да.
Код писал человек-обсфукатор.)
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 02.04.2013, 11:03
Новичок на форуме
Отправить личное сообщение для Ilja_Lv Посмотреть профиль Найти все сообщения от Ilja_Lv
 
Регистрация: 01.04.2013
Сообщений: 3

Спасибо! Теперь всё понятно.
Ответить с цитированием
  #6 (permalink)  
Старый 02.04.2013, 12:46
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Можно слегка пооптимизировать, вместо того, тобы умножать
* [-1,1][+!!reverse]
сделать предварительно, перед функцией
reverse = [-1,1][+!!reverse]
и умножать уже просто
*reverse
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятный алгоритм отработки функций Jopses jQuery 5 16.02.2013 12:55
Центрирование Div-а ч2 alex2012 jQuery 0 15.11.2012 19:01
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21
непонятный вызов функции hedgi Общие вопросы Javascript 2 05.08.2010 11:55