js前端条件语句优化

这篇具有很好参考价值的文章主要介绍了js前端条件语句优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

在实际开发中,由于应用需求可能存在多种情况场景,那处理时就需要列举所有对应的情况去处理,常见的处理可能会用到if…else去处理。但是如果条件判断太多,就会导致代码过于冗余难以维护,因此我们可以使用其他的方式去优化、较少代码冗余量。
使用

1、借用Array的方法

1.1 多个判断用includes或者indexOf

举个例子🌰:

if(color==='yellow'||color==='red'||color==='purple'){
  ...
}

如果类似这种需要判断满足单一情况时,我们可以使用includes或者indexOf来代替|| 去列举其他的情况。
○ includes:判断数组中是否存在对应的枚举值,返回true或false
○ indexOf:判断数组中是否存在对应的枚举值,若存在返回对应元素的下标志,或者返回-1

const colorList=['yellow','red','purple',...]
//includes
if(colorList.includes(color)){
  ...
}
//indexOf
if(colorList.indexOf(color)!==-1){
  ...
}

1.2 所有或部分用every或some

举个例子:

// 1、是否所有情况都满足
const colors= [
    { name: 'color1', color: 'yellow' },
    { name: 'color2', color: 'red' },
    { name: 'color3', color: 'purple' }
];
  
function test(colors) {
    let isAllRed = true;
    for (let c of colors) {
        if (!isAllRed) break;
        isAllRed = (c.color == 'red');
    }
    return isAllRed;
}
//调用
test(colors);

//2、是否有满足的
const colors= [
    { name: 'color1', color: 'yellow' },
    { name: 'color2', color: 'red' },
    { name: 'color3', color: 'purple' }
];
  
function test(colors) {
    let isHasRed = false;
    for (let c of colors) {
        if (isHasRed) break;
        isHasRed = (c.color == 'red');
    }
    return isHasRed;
}
//调用
test(colors);

上面的例子中主要判断是否都满足或者满足一个就去处理,可以使用every来代替全满足情况,使用some来代替满足一种的情况,一行代码即可搞定~

// 1、是否所有情况都满足
const colors= [
    { name: 'color1', color: 'yellow' },
    { name: 'color2', color: 'red' },
    { name: 'color3', color: 'purple' }
];
  
function test(colors) {
   return colors.eveny((item)=>item?.color==='red')
}
//调用
test(colors);

//2、是否有满足的
const colors= [
    { name: 'color1', color: 'yellow' },
    { name: 'color2', color: 'red' },
    { name: 'color3', color: 'purple' }
];
  
function test(colors) {
  return colors.some((item)=>item?.color==='red')
}
//调用
test(colors);

2、对象或者map

2.1 简单判断

当业务代码需要实现类似以下这种情况时

function getColorDescribe(color) {
    if (color === "red") {
        console.log("红色");
    } else if (color === "yellow") {
        console.log("黄色");
    } else if (color === "green") {
        console.log("绿色");
    } else if (color === "purple") {
        console.log("紫色");
    } else if (color === "blue") {
        console.log("蓝色");
    } else {
        console.log("白色");
    }
}

这种代码逻辑上是完全符合需求的,但是如果情况有100+时,那么函数里面就会铺满if…else语句,代码的可读性和可维护都会大大降低。类似这种简单的判断,我们可以将以上的判断存储在一个对象或者map变量中
存储在对象的改造如下

const colorObj={
  red:()=>  console.log("红色"),
  yellow:()=>console.log("黄色"),
  green:()=> console.log("绿色"),
  purple:()=> console.log("紫色"),
  blue:()=>console.log("蓝色"),
}
function getColorDescribe(color){
  return colorObj[color]?.()|| console.log("白色");
}

这样将判读语句提出在外部,函数内部只注重判断结果的处理,浏览代码上更加具有可读性和简洁性
也可以使用使用map来实现相同的效果~

const colorObj=new Map([
  ['red',()=>  console.log("红色")],
  ['yellow',()=>console.log("黄色")],
  ['green',()=> console.log("绿色")],
  ['purple',()=> console.log("紫色")],
  ['blue',()=>console.log("蓝色")],
])
function getColorDescribe(color){
  return colorObj?.get(color)?.()|| console.log("白色");
}

2.2 复杂判断

实际开发时,判断条件不只是简单的相等判断,可能会出现需要满足类似以下复杂情况区域多重等的情况逻辑处理时

function getColorDescribe(color) {
    if (color.length>2) {
        console.log("颜色长度大于2");
    } else if (color === "yellow") {
        console.log("黄色");
    } else if (color?.[0]==='r') {
        console.log("颜色开头时r");
    } else if (color.includes('p')) {
        console.log("颜色包括p");
    } else if (color?.[1]==='y'&&color.length>4) {
        console.log("xxxxxx");
    } else {
        console.log("白色");
    }
}

以上的情况时,可以引进二维数组去优化

const colorObj = [
  [
    (color) => color.length > 2,
    () => console.log("颜色的长度大于2"),
  ],
  [
    (color) => color === "yellow",
    () => console.log("黄色"),
  ],
  [
    (color) => color?.[0] === "r",
    console.log("如果颜色以r开头"),
  ],
  [
    (color) => color.includes("p"),
    console.log("颜色包含p"),
  ],
  [
    (color) =>
      color?.[1] === "y" && color.length > 4,
    console.log("如果颜色以yy结尾且长度大于4"),
  ],
];

function getColorDescribe(color) {
  const getDescribe = colorObj.find((item) => item?.[0](color));
  return getDescribe? getDescribe[1]() : console.log("白色");
}

将判断都存储在二维数组的每一项中的第一项中,将对应的处理逻辑存储在第二项中。使用find去判断该二维数组中的第一项是否满足条件,并且返回。此时如果查找得到就去调用第二项函数处理,否则走默认兜底处理。
这样我们就可以将复杂的逻辑判断提取出来,函数内部尽最大化简化~

3、尽早return

举个例子:需要去判断颜色是否有传,有传时需要判断内部的权重,给出的处理代码如下

function test(color, quantity) {
  const colorList = ['red', 'yellow', 'blue', 'cyan'];

  if (color) {
    if (colorList.includes(color)) {
      console.log('存在');
      if (quantity > 10) {
        console.log('big quantity');
      }
    }
  } else {
  console.log('No Color!');
  }
}

内部需要对有满足的值才去处理,可以使用不满足时就return的方法去改造

function test(color, quantity) {
  const colorList = ['red', 'yellow', 'blue', 'cyan'];
  if(!color) return console.log('No Color!'); // 如果没有传入颜色参数,则返回提示信息
  if(!colorList.includes(color)) return; // 如果传入的颜色参数不在颜色列表中,则返回
  console.log('存在'); // 输出存在的信息
  if (quantity > 10) { // 如果数量大于10
    console.log('big quantity'); // 输出大数量的信息
  }
}

以上逻辑,在没有颜色时就return,没有包括对应的颜色时也return的处理,这种处理可以大大减少内部嵌套。

4、借用运算符

4.1 三元运算符

举个例子

if(color==='red'){
  console.log('红色')
}else{
  console.log('不是红色')
}

当我们的if…else语句中各有一个表达式情况时,我们就可以使用三元运算符去替换
color===‘red’? console.log(‘红色’): console.log(‘不是红色’)
使用三元运算符一行代码即可实现,但是,不推荐多层的三元运算符,会加大阅读性负担。

4.2 ??、||、&&

单个判断时并且只有一个表达式时,可以使用??、||、&&运算符去对应情况处理。例如当color变量没有值时使用??替换if,或者没有值或者是0、false时使用||替换,或者是满足某种情况时使用&&替换。文章来源地址https://www.toymoban.com/news/detail-731482.html

//1.??
if([null,undefined].includes(color)){
  console.log('有值')
}
//替换
color??console.log('有值')

//2.||
if(!color){
  console.log('有值')
}
//替换
color||console.log('有值')

//3.&&
if(color.length>2){
  console.log('有值')
}
//替换
color.length>2&&console.log('有值')

到了这里,关于js前端条件语句优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript条件判断if 语句

    一、if语句的分支 分类:单分支,双分支,多分支,分支嵌套 ()中可以是一个值,也可以是一个表达式 案例: 二、switch ()只能是变量或值,不能是表达式 案例: break必须添加,否则会继续往下执行 问题: 什么时候用if,什么时候用switch if:条件是一个范围 或者 是具体的

    2024年02月06日
    浏览(63)
  • 【JAVA WEB】JavaScript-条件语句

    目录 条件语句 if……else语句 三元表达式 switch 数组 创建数组 获取数组元素  新增数组元素 1.通过修改 length 新增 2.通过下标新增 3. 使用push进行追加元素 删除数组中的元素 调试 示例: script     let num=prompt(\\\"请输入数字:\\\")     if(num % 2 == 0)     {         alert(\\\"这个数字是偶

    2024年02月20日
    浏览(40)
  • 【前端灵魂脚本语言JavaScript⑤】——JS中数组的使用

    🐚 作者: 阿伟 💂 个人主页: Flyme awei 🐋 希望大家多多支持😘一起进步呀! 💬 文章对你有帮助👉关注✨点赞👍收藏📂 第一种: var 数组名 = new Array(); 创建一个空数组 第二种: var arr2 = new Array(10); 创建一个定长为10的数组 第三种 var arr3 = new Array(a,b,c); 创建时直接指定元素值

    2023年04月08日
    浏览(57)
  • MySQL 参考文档:SQL 语句优化(SELECT 语句优化)之索引条件下推(索引下推)优化

    索引下推优化官方文档说明 (Section 8.2.1.5):https://dev.mysql.com/doc/refman/5.7/en/index-condition-pushdown-optimization.html 1. 什么是索引下推? qquad 索引条件下推 (Index Condition Pushdown,ICP) 是 MySQL 在使用索引从表中检索行时的一种优化方法。在没有 ICP 的情况下,存储引擎遍历索引以定位基

    2024年02月16日
    浏览(42)
  • 建站系列(五)--- 前端开发语言之HTML、CSS、JavaScript

    建站系列(一)— 网站基本常识 建站系列(二)— 域名、IP地址、URL、端口详解 建站系列(三)— 网络协议 建站系列(四)— Web服务器之Apache、Nginx 建站系列(五)— 前端开发语言之HTML、CSS、JavaScript 建站系列(六)— 后端开发语言 建站系列(七)— 常用前后端框架

    2024年02月09日
    浏览(50)
  • C 语言教程:条件和 if...else 语句

    您已经学习过 C 语言支持数学中的常见逻辑条件: 小于: a b 小于或等于: a = b 大于: a b 大于或等于: a = b 等于: a == b 不等于: a != b 您可以使用这些条件来根据不同的决策执行不同的操作。 C 语言具有以下条件语句: 使用 if 来指定要执行的代码块,如果指定的条件为真

    2024年02月04日
    浏览(56)
  • 【Go】Go 语言教程--GO条件和循环语句(八)

    往期教程: Go 语言教程–介绍(一) Go 语言教程–语言结构(二) Go 语言教程–语言结构(三) Go 语言教程–数据类型(四) Go 语言教程–语言变量(五) Go 语言教程–GO语言常量(六) Go 语言教程–GO语言运算符(七) 条件语句需要开发者通过指定一个或多个条件,并

    2024年02月13日
    浏览(45)
  • 7.JS里表达式,if条件判断,三元运算符,switch语句,断点调试

    表达式就是可以被求值的代码比如什么a = 1 语句就是一段可以执行的代码比如什么if else 直接给B站的黑马程序员的老师引流一波总结的真好 就是基本上所有的语言都会有的if else 语句就是满足不同的条件执行不同的代码,让计算机有条件判断的能力。 注意在if的括号里面除了

    2024年02月20日
    浏览(52)
  • 解密C语言选择结构:掌握条件语句与分支逻辑的利器

    ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog C语⾔是结构化的程序设计语⾔,这⾥的结构指的是 顺序结构、选择结构、循环结构 。为什么有着三种结构呢,大家其实可以想象一下,生活中的绝大数事

    2024年02月22日
    浏览(48)
  • 大型医院云HIS系统:采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发 融合B/S版电子病历系统

    一套医院云his系统源码 采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发。融合B/S版电子病历系统,支持电子病历四级,HIS与电子病历系统均拥有自主知识产权。 文末卡片获取联系! 基于云计算技术的B/S架构的医院管理系统(简称云HIS),采用前后

    2024年02月03日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包