繁体   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