Непонятный момент в примере функции сравнения
Добрый день!
На 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, время: 14:22. |