如何在if语句中返回多个结果?及如何简化correctSize的范围判断逻辑
解决产品匹配逻辑的两个问题
问题1:获取所有符合条件的产品
原来的代码用了多个if+return的结构,一旦命中第一个条件就直接终止执行,自然拿不到后续符合条件的产品。要解决这个问题,我们需要收集所有匹配结果,而不是立即返回单个结果。
假设你是在遍历产品列表,推荐用filter方法来筛选所有符合条件的产品,调整后的逻辑如下:
// 示例:products是你的产品数组,每个产品包含key属性 const matchedProducts = products.filter(product => { const { key } = product; if ((correctSize === 3 || correctSize === 4) && key === "3kw") return true; if ((correctSize === 4 || correctSize === 5) && key === "4kw") return true; if ((correctSize === 5 || correctSize === 6) && key === "5kw") return true; if ((correctSize === 6 || correctSize === 7) && key === "6kw") return true; return false; });
filter会遍历整个数组,保留所有符合任一条件的产品,不会中途终止。
如果需要先收集所有匹配的key再筛选产品,也可以用数组存储匹配项:
const matchedKeys = []; if (correctSize === 3 || correctSize === 4) matchedKeys.push("3kw"); if (correctSize === 4 || correctSize === 5) matchedKeys.push("4kw"); if (correctSize === 5 || correctSize === 6) matchedKeys.push("5kw"); if (correctSize === 6 || correctSize === 7) matchedKeys.push("6kw"); // 用收集到的key筛选产品 const matchedProducts = products.filter(p => matchedKeys.includes(p.key));
问题2:简化correctSize的范围判断
针对correctSize处于4到6之间的判断,有两种简洁易懂的写法:
- 区间直接比较:适合连续数值的范围判断
// 判断correctSize在4-6之间(包含4和6) if (correctSize >= 4 && correctSize <= 6) { // 执行对应逻辑 }
- 数组includes方法:适合离散整数的判断场景
if ([4, 5, 6].includes(correctSize)) { // 执行对应逻辑 }
进阶优化:用映射关系简化整体逻辑
如果后续需要频繁调整size范围或新增产品key,推荐把规则整理成映射数组,让代码更易维护:
// 定义size范围与产品key的映射关系 const sizeKeyRules = [ { sizes: [3, 4], key: "3kw" }, { sizes: [4, 5], key: "4kw" }, { sizes: [5, 6], key: "5kw" }, { sizes: [6, 7], key: "6kw" }, ]; // 快速找到所有匹配的key const matchedKeys = sizeKeyRules .filter(rule => rule.sizes.includes(correctSize)) .map(rule => rule.key); // 筛选产品 const matchedProducts = products.filter(p => matchedKeys.includes(p.key));
以后要修改规则时,只需要调整sizeKeyRules数组即可,不用改动判断逻辑,扩展性更强。
内容的提问来源于stack exchange,提问作者user19074684
相关产品推荐
相关产品推荐

