Estou me sentindo particularmente inspirado para responder isso por causa da referência DotA. :)
Portanto, se eu entendi o problema corretamente, você não precisará verificar todas as combinações, mas adicionar chaves repetidamente à
query
objeto baseado no conteúdo de três variáveis de sessão. Acho que o seguinte é logicamente equivalente ao seu returnFilterQuery
função acima. 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);
};
Observe que
isEmpty
pode ser uma verificação mais segura do que length
caso a variável de sessão não seja um array.