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

我正在使用一个非常简单的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 }

    }

}


拉风的咖菲猫
浏览 150回答 2
2回答

慕田峪7331174

综合各种意见: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;    }}

慕勒3428872

如果您只关心语法和短代码,则可以使用短路求值。    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使用已存在的所有键创建属性要慢。通常不建议在生产中编写这样的代码,因为理解代码在执行时的作用需要更多时间。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript