2 回答

TA貢獻1828條經(jīng)驗 獲得超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如果您不介意修改現(xiàn)有對象,您可以只用兩個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條經(jīng)驗 獲得超6個贊
如果您只關(guān)心語法和短代碼,則可以使用短路求值。
let query = {};
let bound = (min_budget || max_budget) && (query['budget.middleBound'] = {});
min_budget && (bound.$gte = min_budget);
max_budget && (bound.$lte = max_budget);
代碼的想法是,如果我們需要添加最小或最大條件,我們首先創(chuàng)建一個新的Objectat query['budget.middleBound']。我們還保存了一個引用bound并進一步使用它(因此我們不必再次訪問budget.middleBoundon的屬性query,它的名稱很長)。Object如果需要,我們?nèi)匀恢粍?chuàng)建一個額外的。
請注意,Objects在創(chuàng)建屬性后添加屬性比Object使用已存在的所有鍵創(chuàng)建屬性要慢。
通常不建議在生產(chǎn)中編寫這樣的代碼,因為理解代碼在執(zhí)行時的作用需要更多時間。
添加回答
舉報