Saya merasa sangat terinspirasi untuk menjawab ini karena referensi DotA. :)
Jadi jika saya memahami masalahnya dengan benar, Anda tidak perlu memeriksa setiap kombinasi, melainkan berulang kali menambahkan kunci ke query
objek berdasarkan isi dari tiga variabel sesi. Saya pikir berikut ini secara logis setara dengan returnFilterQuery
Anda fungsi di atas.
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);
};
Perhatikan bahwa isEmpty
mungkin pemeriksaan yang lebih aman daripada length
jika variabel sesi bukan array.