【JS代码规范】如何优化if-else代码规范
1. 快速结束,减少没必要的else
案例一:2种互斥的条件判断
function test(data) {let result = '';if (data < 0) {result = '负数';} else {result = '非负数';}return result;
}
优化一:
function test(data) {if (data < 0) {return '负数';} return '非负数';
}
优化二:三元表达式
function test(data) {return data < 0 ? '负数' : '非负数';
}
案例二:多种互斥的条件判断
function test(data) {let result = '';if (data < 0) {result = '负数';} else if (data === 0) {result = '0';} else {result = '正数';}return result;
}
这个函数可以进一步简化,可以去掉不必要的变量 result,并直接在 if-else 结构中返回结果。这样可以减少代码行数并使代码更加简洁。以下是优化后的函数:
function test(data) {if (data < 0) {return '负数';} else if (data === 0) {return '0';} return '正数';
}
在这个优化后的函数中,我们直接在每个条件分支中使用 return 语句来返回结果,而不再使用 result 变量。这样可以使代码更加清晰简洁。
案例三:前提条件检查
保护子句是一种防御性编程技术,用于处理可能导致程序失败的输入或条件。在这种情况下,我们可以添加输入值的检查,以确保方法在接收到有效输入后才继续执行
如果入参只能是 0和1 ,那么其他的入参没有必要去判断,用return终止
function test(data) {if (data < 0) throw new Error("invalid arguments");if(data > 1) throw new Error("invalid arguments");return data === 0?"default":"admin";
}
2. 多种条件相同的处理
function region(province) {let result = '';if (province === '广东' ||province === '广西' ||province === '福建' ||province === '浙江' ||province === '云南') {result = '南方';}if (province === '河北' ||province === '黑龙江' ||province === '辽宁' ||province === '山东' ||province === '吉林') {result = '北方';}
}
优化一:switch case
function region(province) {switch (province) {case '广东':case '广西':case '福建':case '浙江':case '云南':return '南方';case '河北':case '黑龙江':case '辽宁':case '山东':case '吉林':return '北方';default:return '未知';}
}
优化二:对象字面量或者 Map 结构
您可以优化这个函数,使用对象字面量或者 Map 结构来存储省份和对应的地区信息,以减少重复的比较。以下是一个优化后的版本:
function region(province) {const regionMap = {'广东': '南方','广西': '南方','福建': '南方','浙江': '南方','云南': '南方','河北': '北方','黑龙江': '北方','辽宁': '北方','山东': '北方','吉林': '北方'};return regionMap[province] || '未知'; // 返回对应省份的地区信息,如果未知则返回'未知'
}
优化三:数组 includes
另一种优化方式是将省份和地区的映射关系分组存储,而不是逐个列举所有省份。这样可以使代码更具可扩展性和易维护性。以下是另一种优化后的版本:
function region(province) {const regions = {'南方': ['广东', '广西', '福建', '浙江', '云南'],'北方': ['河北', '黑龙江', '辽宁', '山东', '吉林']};for (const region in regions) {if (regions[region].includes(province)) {return region;}}return '未知';
}
3. 策略模式 多种条件,条件是常量
案例一:按照不同的事件类型,处理不同的事件
function handleEvent(eventType) {if (eventType=== 'click') {handleClickEvent();} else if (eventType=== 'hover') {handleHoverEvent();} else if (eventType=== 'keyup') {handleKeyEvent();} else {handleDefaultEvent();}
}
优化一:
function handleEvent(eventType) {switch (eventType) {case 'click':handleClickEvent();break;case 'hover':handleHoverEvent();break;case 'keyup':handleKeyEvent();break;default:handleDefaultEvent();}
}
进一步优化:
策略模式:
function handleEvent(eventType) {const eventHandlers = {'click': handleClickEvent,'hover': handleHoverEvent,'keyup': handleKeyEvent};const eventHandler = eventHandlers[eventType] || handleDefaultEvent;eventHandler();
}
4. 多种条件嵌套
假设我们有一个简单的电商网站,根据用户的购物车中商品的种类和总金额来给用户不同的折扣。以下是一个使用 if-else 实现多个条件判断和子条件判断的示例:
function calculateDiscount(cartItems, totalAmount) {let discount = 0;if (cartItems.length >= 3) {if (totalAmount > 100) {discount = 0.2; // 20% discount for more than 3 items and total amount over 100} else {discount = 0.1; // 10% discount for more than 3 items and total amount 100 or less}} else {if (totalAmount > 50) {discount = 0.15; // 15% discount for 3 or fewer items and total amount over 50} else {discount = 0; // No discount for 3 or fewer items and total amount 50 or less}}return discount;
}
在这个示例中,根据购物车中商品的种类和总金额来计算折扣。通过嵌套的 if-else 语句,根据不同的条件组合来计算不同的折扣值。这种方式可以根据不同条件灵活地计算折扣,但随着条件的增加,代码会变得复杂且难以维护。
优化:将不同的折扣规则存储在一个数组。
function calculateDiscount(cartItems, totalAmount) {let discount = 0;const isCartItemsMoreThan3 = cartItems.length >= 3;const isTotalMorethen100 = totalAmount > 100;const discountArr = [{ isCartItemsMoreThan3: true, isTotalMorethen100: true, discount: 0.2 },{isCartItemsMoreThan3: true,isTotalMorethen100: false,discount: 0.1,},{isCartItemsMoreThan3: false,isTotalMorethen100: true,discount: 0.15,},{isCartItemsMoreThan3: false,isTotalMorethen100: false,discount: 0,},];discount = discountArr.filter((item) =>item.isCartItemsMoreThan3 === isCartItemsMoreThan3 &&item.isTotalMorethen100 === isTotalMorethen100)[0].discount;return discount;
}相关文章:
【JS代码规范】如何优化if-else代码规范
1. 快速结束,减少没必要的else 案例一:2种互斥的条件判断 function test(data) {let result ;if (data < 0) {result 负数;} else {result 非负数;}return result; }优化一: function test(data) {if (data < 0) {return 负数;} …...
MovieLife 电影生活
MovieLife 电影生活 今天看到一个很有意思的项目:https://www.lampysecurity.com/post/the-infinite-audio-book “我有一个看似愚蠢的想法。通常,这类想法只是一闪而过,很少会付诸实践。但这次有所不同。假如你的生活是一部电影,…...
网工内推 | 中级云运维工程师,双休,五险一金
01 博达人才 🔷招聘岗位:中级云运维工程师 🔷岗位职责 1、受理数据中心、云租户投诉、受理故障工单,并在时限内完成。 2、协助客户开通云产品,解答客户使用过程中的疑问。 3、处理云产品故障,协助进行故…...
Thingsboard规则链:Related Entity Data节点详解
引言 在复杂的物联网(IoT)生态系统中,数据的集成与分析是实现高效管理和智能决策的基础。Thingsboard作为一个强大的开源物联网平台,其规则链(Rule Chains)机制允许用户构建自定义的数据处理流程。其中&am…...
C++结尾
面试题 1.什么是虚函数?什么是纯虚函数 在定义函数时前面加virtual。虚函数是为了,父子类中只有一个该函数。如果在子类重写虚函数,那么用的就是子类重写的虚函数;如果子类没有重写虚函数,那么调用的是父类继承的虚函…...
Flutter鸿蒙化环境配置(windows)
Flutter鸿蒙化环境配置(windows) 参考资料Window配置Flutter的鸿蒙化环境下载配置环境变量HarmonyOS的环境变量配置配置Flutter的环境变量Flutter doctor -v 检测的问题flutter_flutter仓库地址的警告问题Fliutter doctor –v 报错[!] Android Studio (v…...
Vue入门之生命周期
文章目录 一、Vue 生命周期概述二、生命周期的四个阶段1. 创建阶段2. 挂载阶段3. 更新阶段4. 销毁阶段 三、代码案例四、总结 在 Vue 开发中,理解生命周期是非常重要的。Vue 的生命周期可以帮助我们在不同的阶段执行特定的逻辑,从而更好地控制组件的行为…...
UNI-SOP应用场景(1)- 纯前端预开发
在平时新项目开发中,前端小伙伴是否有这样的经历,hi,后端小伙伴们,系统啥时候能登录,啥时候能联调了,这是时候往往得到的回答就是,再等等,我们正在搭建系统呢,似曾相识的…...
力扣9.23
1014. 最佳观光组合 给你一个正整数数组 values,其中 values[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的 距离 为 j - i。 一对景点(i < j)组成的观光组合的得分为 values[i] values[j] i - j ,…...
[Redis][事务]详细讲解
目录 0.什么是事务?1.Redis 事务本质2.Redis 事务意义3.事务操作1.MULTI2.EXEC3.DISCARD4.WATCH5.UNWATCH 0.什么是事务? Redis的事务和MySQL的事务概念上是类似的,都是把一系列操作绑定成一组,让这一组能够批量执行Redis事务和M…...
Latex——一行的划线 如何分开
代码: \cmidrule(r){3-4} \cmidrule(r){5-6} \cmidrule(r){7-8}效果: 参考文章: LaTeX技巧653:如何隔开LaTeX表格邻近\cline表格线?...
大数据:快速入门Scala+Flink
一、什么是Scala Scala 是一种多范式编程语言,它结合了面向对象编程和函数式编程的特性。Scala 这个名字是“可扩展语言”(Scalable Language)的缩写,意味着它被设计为能够适应不同规模的项目,从小型脚本到大型分布式…...
侧边菜单的展开和折叠
环境准备:Vue3Element-UI Plus <script setup> import {ref} from "vue";// 是否折叠菜单,默认折叠 const isCollapse ref(true)</script><template><el-container><el-aside><el-menu:collapse"isCo…...
自动化办公-Python中的for循环
for 循环是 Python 中用于迭代(遍历)序列(如列表、元组、字典、集合、字符串)或其他可迭代对象的控制结构。它允许您逐一访问序列中的每个元素,并对其执行操作。以下是对 for 循环的详细介绍,包括语法、使用…...
Python_itertools
itertools itertools.count(start, step) 返回一个无限迭代器,从指定的start开始,每次增加step。 import itertools # 从1开始,每次增加1,输出前5个数 for i in itertools.count(1, 1):if i > 5:breakprint(i)运行结果&#…...
Apache Iceberg 数据类型参考表
Apache Iceberg 概述-链接 Apache Iceberg 数据类型参考表 数据类型描述实例方法注意事项BOOLEAN布尔类型,表示真或假true, false用于条件判断,例如 WHERE is_active true。确保逻辑条件的正确性。INTEGER32位有符号整数42, -7可用于计算、聚合…...
职责链模式
职责链模式 责任链(Chain of Responsibility)模式:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这…...
新品 | Teledyne FLIR IIS 推出Forge 1GigE SWIR 短波红外工业相机系列
近日,51camera的合作伙伴Teledyne FLIR IIS推出了新品Forge 1GigE SWIR 130万像素的红外相机。 Forge 1GigE SWIR系列的首款相机配备宽频带、高灵敏度的Sony SenSWIR™️ 130万像素IMX990 InGaAs传感器。这款先进的传感器采用5um像素捕捉可见光和SWIR光谱ÿ…...
深入MySQL:掌握索引、事务、视图、存储过程与性能优化
在掌握了MySQL的基本操作之后,你可能会遇到更复杂的数据管理和优化需求。本文将介绍一些MySQL的进阶特性,包括索引、事务、视图、存储过程和函数、以及性能优化等内容。通过学习这些高级功能,你可以更高效地管理和优化你的数据库。 索引 索…...
【WSL——Windows 上使用 Linux 环境】
引入 以前在windows上使用linux工具链,一般都要安装虚拟机(VMware/virtualBox)。虚拟机的缺点是,因为是完整的虚拟环境,消耗系统资源比较多。 windows自己开发了WSL功能,实现了虚拟机的功能,但是比虚拟机性…...
智能求职工具GetJobs:让你的投递效率提升300%的全流程指南
智能求职工具GetJobs:让你的投递效率提升300%的全流程指南 【免费下载链接】get_jobs 💼【找工作最强助手】全平台自动投简历脚本:(boss、前程无忧、猎聘、拉勾、智联招聘) 项目地址: https://gitcode.com/gh_mirrors/ge/get_jobs 每天…...
weixin273基于微信小程序的刷题系统的设计与实现+springboot(文档+源码)_kaic
第4章 系统实现4.1登录功能模块的实现登录功能包括用户登录和管理员登录,在登录界面设计中包括用户名和密码、身份的检验。用户名和密码、身份的检验过程由数据库自动完成,此过程需要1秒左右。首先由用户填写账号和密码,然后选择身份…...
Mac Mouse Fix:释放第三方鼠标潜能,重构macOS输入体验
Mac Mouse Fix:释放第三方鼠标潜能,重构macOS输入体验 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 现象解构:当高端鼠…...
避坑指南:ThingsBoard部件开发中5个常见错误与优化方案(附跑马灯Demo代码)
ThingsBoard部件开发实战:5个高频踩坑点与性能优化技巧(含跑马灯完整实现) 最近在技术社区看到不少开发者讨论ThingsBoard部件开发中的"玄学问题"——明明按照文档操作却出现各种诡异现象。作为经历过完整产品开发周期的技术负责人…...
低门槛AI视频生成新选择:opensora-hpcai本地部署与优化指南
低门槛AI视频生成新选择:opensora-hpcai本地部署与优化指南 【免费下载链接】opensora-hpcai-1_0_ms MindSpore implementation of OpenSora, an open-source project that aims to foster innovation, creativity, and inclusivity within the field of content cr…...
突破微信设备限制:WeChatPad如何实现免Root双设备同时在线
突破微信设备限制:WeChatPad如何实现免Root双设备同时在线 【免费下载链接】WeChatPad 强制使用微信平板模式 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPad 你是否曾因微信只能单设备登录而错失重要消息?是否渴望在手机和平板上同时接…...
Retinaface+CurricularFace在网络安全领域的创新应用
RetinafaceCurricularFace在网络安全领域的创新应用 1. 引言 想象一下这样的场景:一家金融机构的服务器机房,只有授权人员才能进入;一个远程办公系统,确保登录者确实是员工本人;一个高安全性的数据平台,每…...
C#安装步骤以及流程易出错提醒修正
C# 开发环境安装步骤 Visual Studio 安装 从 Microsoft 官网 下载 Visual Studio Community(免费版本)。运行安装程序,选择“使用 C# 的桌面开发”工作负载,确保勾选 .NET SDK 和核心组件。 验证安装 打开命令提示符或 PowerShe…...
CayenneMQTT库详解:嵌入式设备快速接入MQTT平台
1. CayenneMQTT 库概述 CayenneMQTT 是一个专为物联网设备设计的轻量级 MQTT 客户端库,核心目标是将嵌入式终端(如 Arduino、ESP8266、ESP32)快速、可靠地接入 Cayenne IoT 平台 的可视化仪表盘。该库并非从零实现 MQTT 协议栈,…...
Nunchaku FLUX.1-dev 提示词工程入门:编写高质量Prompt的实用技巧与范例
Nunchaku FLUX.1-dev 提示词工程入门:编写高质量Prompt的实用技巧与范例 你是不是也遇到过这种情况:用同一个开源大模型,别人生成的图片精美绝伦,自己生成的却总差点意思,要么主体不对,要么风格跑偏&#…...
