2 回答
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;
}
}
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使用已存在的所有键创建属性要慢。
通常不建议在生产中编写这样的代码,因为理解代码在执行时的作用需要更多时间。
添加回答
举报