Непонятный момент в примере функции сравнения
Добрый день!
На 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]; Спасибо! |
1) !! - приводит значение переменной к Boolean: true or false;
2) + - приводит значение к Number, т.к. применяется к Boolean, то результат 0 or 1; 3) берем либо элемент массива с индексом = 0 or 1; |
Цитата:
|
Цитата:
Код писал человек-обсфукатор.) |
Спасибо! Теперь всё понятно. :)
|
Можно слегка пооптимизировать, вместо того, тобы умножать
* [-1,1][+!!reverse] сделать предварительно, перед функцией reverse = [-1,1][+!!reverse] и умножать уже просто *reverse |
Часовой пояс GMT +3, время: 15:29. |