2015-10-16 30 views
1

我从某些会话变量创建一个MongoDB选择器。如果会话值为空,则选择器不应包含该条件。用JavaScript中的if语句构造一个选择器

我有一个选择

return Session.get('title') ? { title: Session.get('title') } : {}; 

其作品,因为它应该;但是,我想过滤更多的会话值。

如果我再加一条,我得到

var title = Session.get('title'); 
var age = Session.get('age'); 

if (title && age) { 
    return { 
    title: title, 
    age: age 
    }; 
} else if (title) { 
    return { 
    title: title 
    }; 
} else if (age) { 
    return { 
    age: age 
    } 
} else { 
    return {} 
} 

,当我添加另一个会话值只会变得更加复杂。

如何以更智能的方式获得相同的结果?

+0

看来您的代码目前正常工作,而您正在寻求改进它。一般来说,这些问题对于这个网站来说太过分了,但是你可能会在[CodeReview.SE](http://codereview.stackexchange.com/tour)找到更好的运气。请务必阅读[他们的问题要求(http://codereview.stackexchange.com/help/on-topic),因为它们比本网站更严格。 –

+0

是的,我的代码有效,但如果我有10多个会话变量来构造我的选择器,这不是一种不切实际的方法吗?我不认为这是一个简单的对立改进 – Jamgreen

+0

那么,你会看到更多的变数。确实有很大的改进空间,很大的空间。由于有很多方法可以做到这一点,所以不可能给出明确的答案,而“最佳”方式取决于代码风格和个人偏好。 –

回答

3

您可以使用数组来保存所有可能的值,然后在添加新值时添加到此数组中。

var sessionVars = ['title', 'age']; 
var result = {}; 
sessionVars.forEach(function(varName) { 
    var value = Session.get(varName); 
    if (value) { 
    result[varName] = value; 
    } 
}); 
return result; 
+0

完美:-)谢谢 – Jamgreen