如何简化含多分支if/else的Recipe查询代码,将条件整合到查询中?
简化后的代码
你可以通过动态构建查询条件对象消除冗余的if/else分支,只需要一次find调用就能实现相同逻辑:
const query = { ...searchTerm }; if (category) { query.category = category; } if (difficulty) { query.difficulty = { $in: difficulty.split(",") }; } const recipes = await Recipe.find(query);
简化思路
- 先初始化查询对象,继承
searchTerm的所有原有条件 - 单独判断
category是否存在,存在则直接为查询对象添加category精确匹配条件 - 单独判断
difficulty是否存在,存在则添加difficulty的$in匹配逻辑(保留原代码的split处理,将逗号分隔字符串转为数组) - 最后统一调用
Recipe.find(query),所有有效筛选条件会自动整合到查询中
这种写法和原代码逻辑完全一致,但结构更简洁,后续新增筛选条件时,只需添加对应if判断补充条件即可,扩展性更强。
内容的提问来源于stack exchange,提问作者jukenduit
相关产品推荐
相关产品推荐

