【JS】优化代码分支

判断条件很多时,会降低代码的可读性,例如下面这段代码

function fn(type){if(type === 1){console.log('待把相思灯下诉')}else if(type === 2){console.log('一缕新欢')}else if(type === 3){console.log('旧恨千千缕')}else if(type === 4){console.log('最是人间留不住')}else if(type === 5){console.log('朱颜辞镜花辞树')}
}

可以使用一个对象进行映射,优化后写法如下

function fn(type){let obj = {1: '待把相思灯下诉',2: '一缕新欢',3: '旧恨千千缕',4: '最是人间留不住',5: '朱颜辞镜花辞树'}if(obj[type]){console.log(obj[type])}else{console.log('参数不合法')}
}

但上述举例过于绝对,真是开发中可能不同的参数有着不同的逻辑,如:type为1:打印、2:保存数据、3:发送请求、4:…

这里可以优化对象进行映射

function fn(type){let obj = {1: () => {console.log('待把相思灯下诉')}, // 在函数内处理相应操作2: () => {console.log('一缕新欢')},3: () => {console.log('旧恨千千缕')},4: () => {console.log('最是人间留不住')},5: () => {console.log('朱颜辞镜花辞树')},}if(obj[type]){obj[type]() // 调用对应处理函数}else{console.log('参数不合法')}
}

上述场景虽已经然适用于大部分场景,但是部分情境下,判断条件会比直接判断参数更加复杂,如参数是否处于某一区间,是否为number类型,能否被2整除…

这里只是表明每个参数判断逻辑不同

function fn(type){if(type === 1){console.log('待把相思灯下诉')}else if(type % 2 === 0){console.log('一缕新欢')}else if(type === [3][0]){console.log('旧恨千千缕')}else if([5].includes(type)){console.log('最是人间留不住')}else if(type === 7){console.log('朱颜辞镜花辞树')}
}

可以使用元组来映射,将判断条件也变为函数

function fn(type){let map = [[() => type === 1,     // 条件() => console.log('待把相思灯下诉'),  // 处理函数],[() => type % 2 === 0,() => console.log('一缕新欢'), ],[() => type === [3][0],() => console.log('旧恨千千缕'), ],[() => [5].includes(type),() => console.log('最是人间留不住'), ],[() => type === 7,() => console.log('朱颜辞镜花辞树'), ],]// 根据每个数组第一项const target = map.find(m=>m[0]())  // 找到符合判断条件的元组if(target){target[1]()}else{console.log('参数不合法')}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/748965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu20下C/C++编程开启TCP KeepAlive

1、在linux下,测试tcp保活,可以使用tcp自带keepalive功能。 2、几个重要参数: tcp_keepalive_time:对端在指定时间内没有数据传输,则向对端发送一个keepalive packet,单位:秒 tcp_keep…

拌合楼内部管理系统开发(一)立个flag,开始做准备

前言:项目背景情况介绍 公司有意开发一套适合拌合楼的内部管理系统给到客户使用,接触过一家拌合楼行业内号称标杆的企业,去过参观学习的都觉得他们软件好用,但是从软件开发角度看,就是crud钉钉机器人无人值守。虽然公司…

Python语法糖

N u m P y NumPy NumPy的 n d i t e r nditer nditer nditer 是 NumPy 提供的一种多维迭代器,用于对多维数组进行迭代操作。它可以替代传统的嵌套循环,在处理多维数组时更加方便和高效。 迭代器可以按照不同的顺序遍历数组的元素,也可以控制…

npm install和npm install --save的区别

1、npm install XX 会把XX包安装到 node modules 目录中; 不会修改 package.json; 之后运行 npm instal1 命令时,不会自动安装XX; 2、npm install --save XX 会把XX包安装到 node_modules 目录中: 会在 package.json 的 dependencies 属性下添加XX; 之后运行…

JDK8和JDK11在Ubuntu18上切换(解决nvvp启动报错)

本文主要介绍JDK8和JDK11在Ubuntu18上切换,以供读者能够理解该技术的定义、原理、应用。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:计算机杂记 🎀CSDN主页 发狂的小花 🌄人…

Redis列表:高效消息通信与实时数据处理的利器

Redis是一个强大的开源内存数据库,被广泛应用于缓存、会话存储、队列等各种场景中。在Redis中,列表(List)是一种非常重要的数据结构,它提供了存储、获取、操作有序元素集合的功能。本文将深入探讨Redis列表的特性、使用…

C++的类和对象(七):友元、内部类

目录 友元 友元函数 友元类 内部类 匿名对象 拷贝对象时的一些编译器优化 再次理解类和对象 友元 基本概念:友元提供了一种突破封装的方式,有时提供了便利,但是友元会增加耦合度,破坏了封装,所以友元不宜多用&…

[嵌入式系统-39]:龙芯1B 开发学习套件 -10-PMON启动过程Sstart.S详解

目录 一、龙芯向量表与启动程序的入口(复位向量) 1.1 复位向量: 1.2 代码执行流程 1.3 计算机的南桥 VS 北桥 二、PMON代码执行流程 三、Start.S详解 3.1 CPU初始化时所需要的宏定义 (1)与CPU相关的一些宏定义…

北斗卫星在桥隧坡安全监测领域的应用及前景展望

北斗卫星在桥隧坡安全监测领域的应用及前景展望 北斗卫星系统是中国独立研发的卫星导航定位系统,具有全球覆盖、高精度定位和海量数据传输等优势。随着卫星导航技术的快速发展,北斗卫星在桥隧坡安全监测领域正发挥着重要的作用,并为相关领域…

有关于Docker(容器),Image(镜像)部署等名词含义

理解 Docker、镜像和代码修改之间的关系和逻辑可以通过以下步骤来解释: 开发环境设置: 在开发阶段,开发人员通常会编写应用程序的代码。Docker 提供了一种将应用程序与其依赖项打包在一起的方法,称为 Docker 镜像。这个镜像可以包…

element-plus 完成下拉切换功能

项目场景: element-plus element-plus 完成下拉切换功能,选用了popover 组件去进行样式修改,本来大概是要实现下面这样的样式效果,没想到调整的时候,这个选择的高亮模块总是超出。 实现效果: 解决方案&am…

android HAL层崩溃排查记录

要最近在调试系统HDMI CEC功能时,遇到一个奇怪的崩溃问题,这边记录下。 初步分析 先上日志: --------- beginning of crash 03-06 10:48:25.503 1133 1133 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** **…

微信小程序 - 基于scroll view 实现下拉刷新

简介 本文会基于scroll view 实现下拉刷新效果&#xff0c;在下拉的时候会进入loading状态。 实现效果 效果如上图所示&#xff0c;在下拉到底部时候&#xff0c;会出现loading条&#xff0c;在处理完成后loading条消失。 具体代码 布局 <scroll-view scroll-y style&qu…

【AIGC调研系列】通义灵码与copilot的对比

通义灵码与GitHub Copilot的对比主要集中在几个方面&#xff1a;代码编写能力、免费性、操作界面和适配性。 首先&#xff0c;在代码编写能力上&#xff0c;虽然GitHub Copilot在整体上要强于通义灵码&#xff0c;但通义灵码的能力也不算弱&#xff0c;并且在某些特定的小类任…

Windows下anaconda下载安装教程,多图预警【步骤详细版】

Windows下anaconda下载安装教程 一、下载anaconda二、安装详细步骤<图示>1、安装Anaconda2、修改环境变量 三、验证是否安装成功1、查看python版本2、查看pip版本 特别致谢大佬的教程 一、下载anaconda 官网下载&#xff0c;速度太感人&#xff0c;所以这里选择清华开源…

01背包 与 emo题目背景(周超人的遗憾) 的爱恨情仇

本题背景有意思&#xff0c;大家当乐子看&#xff0c;目前没有找到题目原题&#xff0c;也没有写过完全是01背包模板的题目&#xff0c;该篇文章大家注意其01背包一维写法的模板就好&#xff0c;注意各个关键点 ✨欢迎来到脑子不好的小菜鸟的文章✨ &#x1f388;创作不易&…

【Docker】Jaeger 容器化部署

什么是 jaeger? Jaeger是受到Dapper和OpenZipkin启发的由Uber Technologies作为开源发布的分布式跟踪系统&#xff0c;兼容 OpenTracing 以及 Zipkin追踪格式&#xff0c;目前已成为CNCF基金会的开源项目。其前端采用React语言实现&#xff0c;后端采用GO语言实现&#xff0c;…

从政府工作报告探计算机行业发展——探索计算机行业发展蓝图

目录 前言 一、政策导向与行业发展 &#xff08;一&#xff09;政策导向的影响 &#xff08;二&#xff09;企业如何把握政策机遇推动创新发展 二、技术创新与产业升级 三、数字经济与数字化转型 四、国际合作与竞争态势 五、行业人才培养与科技创新 &#xff08;一&a…

论文阅读——RemoteCLIP

RemoteCLIP: A Vision Language Foundation Model for Remote Sensing 摘要——通用基础模型在人工智能领域变得越来越重要。虽然自监督学习&#xff08;SSL&#xff09;和掩蔽图像建模&#xff08;MIM&#xff09;在构建此类遥感基础模型方面取得了有希望的结果&#xff0c;但…

相机安装位置固定后开始调试设备供电公司推荐使用方法

摄像头安装位置固定后开始调试 设备供电&#xff1a;无电源设备需要连接12V/2A电源并连接到摄像机的DC端口&#xff0c;而有电源的摄像机可以直接连接到220V电源。 连接设备&#xff1a;如果是有线连接&#xff0c;请使用网线将设备连接到电脑&#xff08;建议直接连接&#…