JS中比Switch…Case更优雅的多条件判断写法

yizhihongxing

JS中使用Switch...Case方式进行多条件判断的常见缺点是比较冗长,不够简洁和优雅。本文将为大家介绍一种利用对象字面量来进行多条件判断的方式,来让代码更加优雅和易读。

使用对象字面量进行多条件判断的写法

使用对象字面量方式进行多条件判断,我们可以通过JS对象属性来表示条件判断中的每个case,通过函数属性来表示每个case对应的逻辑操作。示例如下:

const multiCondition = {
  caseA() {
    //TODO
  },
  caseB() {
    //TODO
  },
  caseC() {
    //TODO
  },
  default() {
    //TODO
  }
}

function executeCase (condition) {
  if (multiCondition[condition]) {
    multiCondition[condition]()
  } else {
    multiCondition['default']()
  }
}

上述代码中,multiCondition对象中分别定义了caseA、caseB、caseC和default四个函数属性,分别对应条件判断中的各个case和default。executeCase函数是一个对外暴露的函数,参数为condition,表示当前需要执行的case。函数内部进行更具当前条件判断不同的操作。

举例说明

下面来演示一个更加具体的场景:针对不同商品在购买时,需要计算其价格和折扣,并在订单中记录下来。这时候我们可以通过switch...case的方式实现:

const calculatePriceAndDiscount = (product, quantity) => {
  let price = 0
  let discount = 0
  switch (product) {
    case 'cup':
      price = 5
      discount = quantity >= 10 ? 0.05 : 0
      break
    case 'pen':
      price = 2
      discount = quantity >= 20 ? 0.1 : 0
      break
    case 'book':
      price = 10
      discount = quantity >= 5 ? 0.03 : 0
      break
    default:
      console.log('Invalid product')
      break
  }
  const payment = (1 - discount) * price * quantity
  return {price, discount, payment}
}

以上是传统方式的Switch...Case实现,当有新增product或需对既有case进行修改时,需要额外修改代码。而使用对象字面量进行多条件判断代码如下:

const calculatePriceAndDiscount = (product, quantity) => {
  const products = {
    cup: () => {
      return {price: 5, discount: quantity >= 10 ? 0.05 : 0}
    },
    pen: () => {
      return {price: 2, discount: quantity >= 20 ? 0.1 : 0}
    },
    book: () => {
      return {price: 10, discount: quantity >= 5 ? 0.03 : 0}
    },
    default: () => {
      console.log('Invalid product')
      return {price: 0, discount: 0}
    }
  }
  const {price, discount} = products[product]() || products['default']()
  const payment = (1 - discount) * price * quantity
  return {price, discount, payment}
}

我们可以注意到,使用对象字面量方式进行多条件判断可以通过加入属性的方式,更加灵活地对代码进行修改和适应场景变化。

以上就是“JS中比Switch...Case更优雅的多条件判断写法”的攻略,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中比Switch…Case更优雅的多条件判断写法 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 24个解决实际问题的ES6代码片段(小结)

    可以了解一下“24个解决实际问题的ES6代码片段(小结)”的攻略。 介绍 这篇文章主要介绍了24个使用ES6语法的代码片段,这些代码片段都是用于解决实际问题的,并且代码风格简洁、易于理解。 内容 文章一共分成24个小节,每个小节都介绍了一个使用ES6语法的代码片段,涉及到如何使用ES6的arrow function、template literals、des…

    JavaScript 2023年6月10日
    00
  • javascript之函数直接量(function(){})()

    下面就来详细讲解一下“javascript之函数直接量(function(){})()”的攻略。 什么是函数直接量? 在 Javascript 中我们可以使用 function 来构造函数,这种构造方式被称为“函数直接量”。 函数直接量的语法如下: function 函数名称(参数1, 参数2, …, 参数n) { // 函数体 } 其中 函数名称 和 …

    JavaScript 2023年5月27日
    00
  • 实例解析package.json和最常见的scripts字段

    关于“实例解析package.json和最常见的scripts字段”的攻略,我会提供如下内容: 一、什么是package.json? package.json是Node.js项目中杂项文件中最重要的一份,其定义了项目的基本信息和开发所需的各种依赖以及构建、打包、测试等各个方面的命令和配置。通过这个文件,我们可以更好地管理项目依赖、规范版本、运行脚本等,也可以…

    JavaScript 2023年5月27日
    00
  • JavaScript中判断函数是new还是()调用的区别说明

    JavaScript中,我们可以通过判断一个函数是通过new关键字调用还是直接使用函数名加括号调用来区分不同的调用方式,从而进行不同的操作。 判断函数是通过new关键字调用还是直接使用函数名加括号调用的步骤如下: 首先,我们需要先了解JavaScript中几个概念:构造函数、原型对象和实例对象。 构造函数:构造函数是用于创建实例对象的函数,在JavaScri…

    JavaScript 2023年6月10日
    00
  • JavaScript实现维吉尼亚(Vigenere)密码算法实例

    下面我将详细讲解“JavaScript实现维吉尼亚(Vigenere)密码算法实例”的完整攻略。 什么是维吉尼亚(Vigenere)密码算法? 维吉尼亚(Vigenere)密码算法是一种多表密码算法,它是基于一个关键字与明文的组合形成密文的算法。这种密码算法最早由法国密码学家布拉泽尔(Blaise de Vigenere)于16世纪提出。 维吉尼亚密码算法的…

    JavaScript 2023年5月19日
    00
  • JS简单生成两个数字之间随机数的方法

    生成两个数字之间的随机数在开发中是很常见的需求,下面我将为大家提供 JS 简单生成两个数字之间随机数的攻略: 使用 Math.random() 方法 Math.random() 方法返回一个介于 0 到 1 之间的随机数。我们可以使用该方法生成两个数字之间的随机数。 在获取到随机数后,我们可以将其范围转换为两个数字之间的随机数,例如要生成 1 到 100 之…

    JavaScript 2023年5月28日
    00
  • Bootstrap Table的使用总结

    Bootstrap Table的使用总结 Bootstrap Table是一个基于Bootstrap的jQuery插件,它可以将一个普通的HTML表格转化成一个功能丰富的高级表格,支持分页、排序、搜索、多选等功能。在前端开发中,Bootstrap Table常常被用来展示比较复杂的数据集,它简单易用,功能强大,可以大大提升用户体验。 安装 要使用Bootst…

    JavaScript 2023年6月10日
    00
  • 如何为你的JavaScript代码日志着色详解

    下面是关于如何为JavaScript代码日志着色的完整攻略: 为什么需要为JavaScript代码日志着色 当我们在开发JavaScript应用程序时,经常需要查看日志信息来调试代码、排除错误等。但是,当日志信息量过大时,我们很难一眼区分出哪些是错误信息、哪些是调试信息、哪些是警告信息等。因此,着色的日志信息能够更快更直观地帮助我们了解代码的执行情况,提高代…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部