Cítím se obzvláště inspirován, abych na to odpověděl kvůli odkazu DotA. :)
Pokud tedy správně chápu problém, neměli byste muset kontrolovat každou kombinaci, ale spíše opakovaně přidávat klíče do query
objekt založený na obsahu tří proměnných relace. Myslím, že následující je logicky ekvivalentní vašemu returnFilterQuery
funkce výše.
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);
};
Všimněte si, že isEmpty
může být bezpečnější kontrola než length
v případě, že proměnná relace není pole.