[英]What would the best way to clean these if statements up?
我正在使用一個非常簡單的if語句樹,並希望將代碼盡可能地寫為DRY,我相信我正在為我的用例實現DRYest代碼,並嘗試編寫指向對象鍵的指針(似乎可以不使用setter函數)並簡化花括號,但出於問題的目的,我將其留在了后面,以使您清楚需要做什么。
如果有樹,是否有一個更簡單的版本?
let query = {};
if (min_budget || max_budget) {
if(min_budget && max_budget) {
query['budget.middleBound'] = { $gte: min_budget, $lte: max_budget }
} else if (min_budget && !max_budget) {
query['budget.middleBound'] = { $gte: min_budget }
} else if (max_budget && !min_budget) {
query['budget.middleBound'] = { $lte: max_budget }
}
}
合並各種注釋:
let query = {};
if (min_budget && max_budget) {
query['budget.middleBound'] = { $gte: min_budget, $lte: max_budget };
} else if (min_budget) { // ***
query['budget.middleBound'] = { $gte: min_budget };
} else if (max_budget) { // ***
query['budget.middleBound'] = { $lte: max_budget };
}
除非有更多特定於域的信息,否則可能是簡單直接的版本。
如果您不介意修改現有對象,則只需兩個if
完成:
let query = {};
if (min_budget || max_budget) {
const mb = query['budget.middleBound'] = {};
if (min_budget) {
mb.$gte = min_budget;
}
if (max_budget) {
mb.$lte = max_budget;
}
}
如果您只關心語法和短代碼,則可以使用短路評估 。
let query = {};
let bound = (min_budget || max_budget) && (query['budget.middleBound'] = {});
min_budget && (bound.$gte = min_budget);
max_budget && (bound.$lte = max_budget);
該代碼的思想是,如果需要添加最小或最大條件,則首先在query['budget.middleBound']
處創建一個新的Object
。 我們還保存在一個參考bound
,並進一步使用它(所以我們沒有再次訪問budget.middleBound
物業query
,其中有一個很長的名字)。 如果需要,我們仍然僅創建一個額外的Object
。
請注意,創建屬性后將其添加到Objects
比創建具有所有鍵的Object
要慢。
通常不建議在生產環境中編寫這樣的代碼,因為這樣做會花費更多時間來了解代碼在執行時的作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.