Ich fühle mich aufgrund der DotA-Referenz besonders inspiriert, darauf zu antworten. :)
Wenn ich das Problem richtig verstehe, sollten Sie also nicht jede Kombination überprüfen müssen, sondern immer wieder Schlüssel zur query
hinzufügen Objekt basierend auf dem Inhalt von drei Sitzungsvariablen. Ich denke, das Folgende ist logisch äquivalent zu Ihrer returnFilterQuery
Funktion oben.
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);
};
Beachten Sie, dass isEmpty
ist kann eine sicherere Prüfung sein als length
falls die Sitzungsvariable kein Array ist.