如何精简JavaScript多分支语言映射判断代码?
精简JavaScript条件分支的方案
嘿,这个问题我太熟了——一堆else if确实看着闹心,用对象映射来处理这种固定的键值对应简直是完美解决方案!
核心思路
把需要转换的语言名称和目标值做成键值对的映射对象,这样就能用一行代码替代所有的else if判断,代码不仅更简洁,后续维护也方便(加新语言直接在映射里加就行)。
修改后的完整代码
Repo.find({ 'owner.login': userId }, 'project_type login name language description', function (err, repoData) { if (err) console.log(err); // 定义语言映射规则:键是原语言名,值是要替换成的目标名 const languageMap = { html: 'html5', css: 'css3', 'c#': 'csharp', 'c++': 'cplusplus' }; for (let image of repoData) { let language_url = image.language?.toLowerCase() || ''; // 可选:加可选链避免null/undefined报错 if (image.language === 'null') { image.imageUrl = `/images/app/${image.project_type}.png`; } else { // 用映射对象获取目标值,没有匹配的就保留原语言名 language_url = languageMap[language_url] || language_url; console.log(language_url); image.imageUrl = `https://raw.githubusercontent.com/konpa/devicon/master/icons/${language_url}/${language_url}-original.svg`; } // 修复原代码逻辑问题:避免最后一行覆盖null分支的路径设置 } })
关键优化点
- 用
languageMap对象统一管理所有语言转换规则,一目了然,新增语言只需要加一行键值对 - 用
languageMap[language_url] || language_url实现“有映射就用映射值,没有就用原值”的逻辑,直接替代了5个else if - 修复原代码的逻辑漏洞:原代码最后一行的
image.imageUrl会覆盖前面null分支设置的路径,现在调整到else分支里,保证逻辑正确 - 可选的
image.language?.toLowerCase():如果image.language可能是null或undefined,加可选链操作符可以避免报错
补充说明
如果以后需要新增其他语言的映射,比如把javascript改成js,只需要在languageMap里加一行:javascript: 'js'就行,完全不用改条件判断的代码,维护成本极低。
内容的提问来源于stack exchange,提问作者writingdeveloper
相关产品推荐
相关产品推荐

