Czuję się szczególnie zainspirowany, aby odpowiedzieć na to pytanie ze względu na odniesienie DotA. :)
Więc jeśli dobrze rozumiem problem, nie powinieneś sprawdzać każdej kombinacji, ale raczej wielokrotnie dodawać klucze do query
obiekt na podstawie zawartości trzech zmiennych sesji. Myślę, że poniższe jest logicznie równoważne z twoim returnFilterQuery
funkcja powyżej.
var returnFilterQuery = function() {
var query = {game: 'dota'};
var modifyQueryIfArray = function(key, sessionKey) {
var value = Session.get(sessionKey);
if (!_.isEmpty(value))
query[key] = {$in: value};
};
modifyQueryIfArray('gamemode', 'dotaMode');
modifyQueryIfArray('region', 'dotaRegion');
modifyQueryIfArray('skill', 'dotaSkill');
return Session.set('dotaFilter', query);
};
Zauważ, że isEmpty
może być bezpieczniejszym sprawdzeniem niż length
w przypadku, gdy zmienna sesji nie jest tablicą.