Чувствам се особено вдъхновен да отговоря на това поради препратката към DotA. :)
Така че, ако разбирам проблема правилно, не трябва да проверявате всяка комбинация, а по-скоро многократно добавяне на ключове към query
обект въз основа на съдържанието на три променливи на сесията. Мисля, че следното е логически еквивалентно на вашия returnFilterQuery
функция по-горе.
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);
};
Обърнете внимание, че isEmpty
може да е по-безопасна проверка от length
в случай че променливата на сесията не е масив.