You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:55:33