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

简化TypeScript多分支if-else语句的方案咨询

简化冗长的月份翻译映射逻辑

这种一长串的if-else分支确实既冗余又难维护,结合你的技术栈,咱们可以用映射对象的方式彻底简化这段代码,同时还能提升可读性和扩展性。下面给你几个实用的方案:

方案1:基础映射对象(最直观)

首先定义一个英文月份到i18n翻译标识的映射表,把所有对应关系集中管理,然后直接通过键值对查找替换:

// 集中定义月份与翻译标识的映射关系
const monthTranslationMap: Record<string, string> = {
  January: this.JAN,
  February: this.FEB,
  March: this.MAR,
  April: this.APR,
  May: this.MAY,
  June: this.JUN,
  July: this.JUL,
  August: this.AUG,
  September: this.SEP,
  October: this.OCT,
  November: this.NOV,
  December: this.DEC
};

// 简化遍历逻辑:只处理字符串类型的月份,跳过数值(比如金额)
Object.values(data.details.data1).forEach(item => {
  if (typeof item === 'string' && monthTranslationMap[item]) {
    xAxisTranslatedArray.push(monthTranslationMap[item]);
  }
});

为什么这更好?

  • 所有映射关系一目了然,后续修改/新增月份只需要调整映射表,不用动遍历逻辑
  • 避免了大量重复的条件判断,减少出错概率
  • 加了类型判断,过滤掉monthToDate这类数值,避免无效判断

方案2:结合Lodash更高效处理

如果想用Lodash简化数据筛选和转换,可以先提取出需要的月份字符串,再批量映射:

import _ from 'lodash';

// 先从data1中筛选出所有字符串类型的月份值
const targetMonths = _.filter(Object.values(data.details.data1), _.isString);

// 批量转换并推入数组(用扩展运算符更简洁)
xAxisTranslatedArray.push(..._.map(targetMonths, month => monthTranslationMap[month]));

方案3:精准提取目标字段(最优性能)

观察你的JSON结构,data1里只有firstLastMonth和secondLastMonth是需要翻译的月份字段,其他都是数值。与其遍历所有值,不如直接提取这两个字段,性能更优:

// 直接获取需要翻译的两个月份
const monthsToTranslate = [
  data.details.data1.firstLastMonth,
  data.details.data1.secondLastMonth
];

// 批量映射
monthsToTranslate.forEach(month => {
  xAxisTranslatedArray.push(monthTranslationMap[month]);
});

这个方案完全避免了遍历无关数据,逻辑最清晰,也最适合你给Highcharts X轴提供数据的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:05:31