为了账号安全,请及时绑定邮箱和手机立即绑定

清理这些 if 语句的最佳方法是什么?

清理这些 if 语句的最佳方法是什么?

拉风的咖菲猫 2021-09-30 15:14:17
我正在使用一个非常简单的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 }    }}
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

综合各种意见:


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如果您不介意修改现有对象,您可以只用两个s 来完成:


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;

    }

}


查看完整回答
反对 回复 2021-09-30
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

如果您只关心语法和短代码,则可以使用短路求值。


    let query = {};

    let bound = (min_budget || max_budget) && (query['budget.middleBound'] = {});

    min_budget && (bound.$gte = min_budget);

    max_budget && (bound.$lte = max_budget);

代码的想法是,如果我们需要添加最小或最大条件,我们首先创建一个新的Objectat query['budget.middleBound']。我们还保存了一个引用bound并进一步使用它(因此我们不必再次访问budget.middleBoundon的属性query,它的名称很长)。Object如果需要,我们仍然只创建一个额外的。


请注意,Objects在创建属性后添加属性比Object使用已存在的所有键创建属性要慢。


通常不建议在生产中编写这样的代码,因为理解代码在执行时的作用需要更多时间。


查看完整回答
反对 回复 2021-09-30
  • 2 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信