JavaScript中if else语句正确设置及多条件判断函数优化求助
问题分析与改进方案
问题根源
原函数采用else if链式判断结构,这种逻辑的核心问题是只要前面某个条件成立,后续所有条件都会被直接跳过。比如当fisikTotal !== TotalSystem和fisikLokasi !== LokasiSystem同时不匹配时,第一个if就会将reason设为"Beda Quantity",后面的组合条件根本不会被执行,这就是你无法匹配多条件组合的直接原因。
另外代码里还有个笔误:"Bedal Lokasi"应该修正为"Beda Lokasi"。
改进方案
正确的思路是先收集所有不匹配的维度,再根据收集到的内容生成对应的描述,这种方式能自然覆盖所有组合情况,逻辑更清晰也更容易维护。
优化后的代码
const Keterangan = ( fisikTotal, fisikLokasi, MaterialFisik, TotalSystem, LokasiSystem, MaterialSystem ) => { const mismatches = []; // 逐个检查每个维度的匹配情况 if (fisikTotal !== TotalSystem) { mismatches.push("Quantity"); } if (fisikLokasi !== LokasiSystem) { mismatches.push("Lokasi"); } if (MaterialFisik !== MaterialSystem) { mismatches.push("Material"); } // 根据不匹配项数量生成对应文本 if (mismatches.length === 0) { return "OK"; } else if (mismatches.length === 1) { return `Beda ${mismatches[0]}`; } else if (mismatches.length === 2) { return `Beda ${mismatches.join(" dan ")}`; } else { return `Beda ${mismatches.slice(0, -1).join(", ")} dan ${mismatches[mismatches.length - 1]}`; } };
代码说明
- 用数组
mismatches存储所有不匹配的维度名称,确保所有不符合条件的情况都能被捕获 - 使用独立的
if判断(而非else if),避免前面的条件拦截后续检查 - 最后根据数组长度生成符合语法习惯的描述:
- 空数组 → 返回"OK"(完全匹配)
- 1个元素 → 单维度不匹配(如"Beda Quantity")
- 2个元素 → 用"dan"连接两个维度(如"Beda Quantity dan Lokasi")
- 3个元素 → 前两个用逗号分隔,最后一个用"dan"连接(如"Beda Material, Quantity dan Lokasi")
使用示例
// 三个维度都不匹配 console.log(Keterangan(10, "Jakarta", "Steel", 20, "Bandung", "Wood")); // 输出:"Beda Quantity, Lokasi dan Material" // 仅Material不匹配 console.log(Keterangan(5, "Jakarta", "Steel", 5, "Jakarta", "Wood")); // 输出:"Beda Material" // 完全匹配 console.log(Keterangan(5, "Jakarta", "Steel", 5, "Jakarta", "Steel")); // 输出:"OK"
内容的提问来源于stack exchange,提问作者Josea Samoa
相关产品推荐
相关产品推荐

