簡體   English   中英

如果清除這些語句,最好的方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM