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

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日

相关文章

  • JS面试之对事件循环的理解

    JS面试之对事件循环的理解 事件循环是 JavaScript 事件模型的核心,对于理解 JavaScript 的异步编程至关重要。事实上,事件循环是 JavaScript 成功的关键之一。 什么是事件循环? JavaScript 是一种单线程编程语言。它有且只有一个主线程,因此只能同时执行一个任务。 事件循环是 JavaScript 异步编程的解决方案之一,…

    JavaScript 2023年5月28日
    00
  • 对于js垃圾回收机制的理解

    关于 JS 垃圾回收机制的理解,可以从下面三个方面来进行说明: 什么是垃圾回收? 垃圾回收是一种自动化的过程,它主要的功能是自动找出不再被程序所使用的内存,然后释放这些内存资源。JS 中的垃圾回收,就是通过一些算法来进行自动的垃圾回收。 垃圾回收的算法 垃圾回收器通过检查数据的引用,找出不再被引用的变量,然后进行垃圾回收操作。JS 垃圾回收是基于算法原理的。…

    JavaScript 2023年6月11日
    00
  • JS访问对象两种方式区别解析

    JS访问对象有两种方式:点号和方括号。它们之间有着一些细微的差异,下面我将逐一进行解析。 1. 点号方法 语法: objectName.propertyName 使用点号方法时,我们需要知道对象的属性名称。点号引用属性时,也可以引用变量。 示例: const person = { name: "张三", age: 18 } console…

    JavaScript 2023年5月27日
    00
  • 微信小程序表单验证功能完整实例

    下面是关于“微信小程序表单验证功能完整实例”的详细攻略,包含了代码实现和示例说明。 1. 简介 在微信小程序开发过程中,我们经常需要使用表单来收集用户数据。为了保证数据的有效性和安全性,我们需要对表单数据进行验证。下面我们就来介绍一种微信小程序表单验证功能的完整实例。 2. 实现步骤 2.1 HTML 结构 首先,我们需要在 HTML 中添加表单元素,并设置…

    JavaScript 2023年6月10日
    00
  • jQuery学习笔记之创建DOM元素

    jQuery学习笔记之创建DOM元素 什么是DOM DOM (Document Object Model),文档对象模型,是W3C组织推荐的处理XML和HTML文档的标准编程接口。DOM将HTML或XML文档表示为节点与对象的组合,开发者可以使用JavaScript、VBScript等脚本语言对其进行操作。 在jQuery中,大量使用DOM元素操作,例如:创…

    JavaScript 2023年6月10日
    00
  • web性能优化之javascript性能调优

    Web性能优化是Web开发中非常重要的一环,其中JavaScript性能调优更是至关重要。下面是JavaScript性能调优的完整攻略: 1. 代码优化 1.1 压缩和混淆 代码的压缩和混淆可以有效减小资源文件的大小,提高页面加载速度。常用的工具有UglifyJS,Google Closure Compiler等。 1.2 避免不必要的全局变量 全局变量会影…

    JavaScript 2023年5月28日
    00
  • JavaScript数据分析之交集,并集,对称差集

    JavaScript数据分析之交集、并集、对称差集 什么是交集、并集、对称差集 在数学中,交集、并集、对称差集都是一些集合运算,这些概念同样适用于JavaScript中的数组。 交集(Intersection):找出两个数组中共同的元素,返回这些共同元素的新数组。 并集(Union):找出两个数组中所有的元素并集,返回这些元素的新数组。 对称差集(Symme…

    JavaScript 2023年5月28日
    00
  • js利用正则表达式检验输入内容是否为网址

    确保输入内容为网址是 Web 开发中常见的任务之一。正则表达式是一种强大的工具,可以帮助我们检测输入内容是否符合特定的模式。JavaScript 提供了内置的正则表达式对象 RegExp,它可以用来检验输入内容是否为网址。下面是检验输入是否为网址的完整攻略。 1. 创建正则表达式对象 在使用正则表达式检验输入前,我们需要先创建一个正则表达式对象来描述要检验的…

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