Tôi cảm thấy đặc biệt có cảm hứng để trả lời câu hỏi này vì tài liệu tham khảo về DotA. :)
Vì vậy, nếu tôi hiểu vấn đề một cách chính xác, bạn không cần phải kiểm tra mọi kết hợp mà nên thêm nhiều lần khóa vào query
đối tượng dựa trên nội dung của ba biến phiên. Tôi nghĩ điều sau đây về mặt logic tương đương với returnFilterQuery
của bạn chức năng trên.
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);
};
Lưu ý rằng isEmpty
có thể là một kiểm tra an toàn hơn length
trong trường hợp biến phiên không phải là một mảng.