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

JS中多case共用结果的switch语句的更优替代实现方案

JS中替代多Case同结果Switch语句的优化写法

在JS里,用对象查找替代switch-case是很常用的优化手段,比如下面的示例:

常规switch写法

function phoneticLookup(val) {
  var result = "";

  switch(val) {
    case "alpha":
      result = "Adams";
      break;
    case "bravo":
      result = "Boston";
      break;
    case "charlie":
      result = "Chicago";
      break;
  }
  return result;
}

对象查找替代写法

function phoneticLookup(val) {
  var result = "";

  var lookup = {
    "alpha": "Adams",
    "bravo": "Boston",
    "charlie": "Chicago",
  };

  result = lookup[val];
  return result;
}

但如果遇到多个case对应同一结果的switch语句(比如下面根据国家匹配大洲的场景),可以用以下几种不用if-else的方式优化:

原switch语句示例

let continent = '';
switch (country) {
   case "China":
   case "India":
   case "Nepal": 
       continent = 'Asia';
       break;
   case "UK":
   case "France":
   case "Poland": 
       continent = 'Europe';
       break;
   case "Egypt":
   case "Zimbave":
   case "Somalia": 
       continent = 'Africa';
       break;
   default: 
       continent = 'Other'
       break;
}

优化方案

方案一:直接构建国家→大洲的映射对象(推荐,O(1)查找)

这种写法最直观,查找性能最优,代码简洁易维护:

const countryToContinent = {
  "China": "Asia",
  "India": "Asia",
  "Nepal": "Asia",
  "UK": "Europe",
  "France": "Europe",
  "Poland": "Europe",
  "Egypt": "Africa",
  "Zimbave": "Africa",
  "Somalia": "Africa"
};

// 用||处理默认值
const continent = countryToContinent[country] || 'Other';

方案二:分组映射+遍历查找(减少重复代码)

如果不想重复书写大洲名称,可以按大洲分组,再通过遍历匹配:

const continentGroups = {
  "Asia": ["China", "India", "Nepal"],
  "Europe": ["UK", "France", "Poland"],
  "Africa": ["Egypt", "Zimbave", "Somalia"]
};

// 用find方法快速匹配
const continent = Object.entries(continentGroups)
  .find(([_, countries]) => countries.includes(country))?.[0] || 'Other';

注:这种写法查找时间复杂度为O(n)(n为大洲分组数量),适合国家数量极多、希望减少代码重复的场景。

方案三:使用Map结构(支持灵活键类型)

如果需要支持非字符串类型的键,或者想避免对象原型链的潜在问题,可以用Map:

const countryContinentMap = new Map([
  ["China", "Asia"],
  ["India", "Asia"],
  ["Nepal", "Asia"],
  ["UK", "Europe"],
  ["France", "Europe"],
  ["Poland", "Europe"],
  ["Egypt", "Africa"],
  ["Zimbave", "Africa"],
  ["Somalia", "Africa"]
]);

const continent = countryContinentMap.get(country) || 'Other';

内容的提问来源于stack exchange,提问作者newbie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:31:08