2015-10-16 29 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