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