Jeg føler mig særligt inspireret til at svare på dette på grund af DotA-referencen. :)
Så hvis jeg forstår problemet korrekt, skulle du ikke skulle tjekke hver kombination, men snarere gentagne gange tilføje nøgler til query objekt baseret på indholdet af tre sessionsvariabler. Jeg tror, at følgende logisk svarer til din returnFilterQuery funktion ovenfor.
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);
};
Bemærk, at isEmpty kan være en sikrere kontrol end length hvis sessionsvariablen ikke er et array.