首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js 重构if多层

在JavaScript开发中,多层嵌套的if语句会使代码难以阅读和维护。为了提高代码的可读性和可维护性,可以采用以下几种方式进行重构:

一、基础概念

  1. 嵌套if语句:在一个if语句内部再包含一个或多个if语句。
  2. 代码可读性:代码结构清晰,易于理解。
  3. 代码维护性:代码易于修改和扩展。

二、重构的优势

  1. 提高代码可读性:减少嵌套层次,使代码结构更加清晰。
  2. 提高代码维护性:更容易定位和修改逻辑。
  3. 减少错误:简化逻辑,降低出错概率。

三、重构类型及示例

1. 使用switch语句

适用于多个条件判断且条件为同一变量的情况。

原始代码:

代码语言:txt
复制
if (status === 'success') {
    // 处理成功逻辑
} else if (status === 'error') {
    // 处理错误逻辑
} else if (status === 'pending') {
    // 处理待处理逻辑
} else {
    // 处理其他逻辑
}

重构后:

代码语言:txt
复制
switch (status) {
    case 'success':
        // 处理成功逻辑
        break;
    case 'error':
        // 处理错误逻辑
        break;
    case 'pending':
        // 处理待处理逻辑
        break;
    default:
        // 处理其他逻辑
}

2. 使用对象映射

适用于条件和对应操作可以映射为键值对的情况。

原始代码:

代码语言:txt
复制
if (command === 'start') {
    startProcess();
} else if (command === 'stop') {
    stopProcess();
} else if (command === 'restart') {
    restartProcess();
} else {
    console.log('Unknown command');
}

重构后:

代码语言:txt
复制
const commandMap = {
    start: startProcess,
    stop: stopProcess,
    restart: restartProcess
};

if (commandMap[command]) {
    commandMap[command]();
} else {
    console.log('Unknown command');
}

3. 使用函数分解

将复杂的条件逻辑拆分为多个小函数,每个函数处理特定的逻辑。

原始代码:

代码语言:txt
复制
if (user.isAdmin) {
    if (user.isActive) {
        grantFullAccess();
    } else {
        grantLimitedAccess();
    }
} else {
    if (user.isActive) {
        grantUserAccess();
    } else {
        denyAccess();
    }
}

重构后:

代码语言:txt
复制
function checkAdminAccess(user) {
    if (user.isAdmin && user.isActive) {
        grantFullAccess();
    } else if (user.isAdmin) {
        grantLimitedAccess();
    } else if (user.isActive) {
        grantUserAccess();
    } else {
        denyAccess();
    }
}

checkAdminAccess(user);

4. 使用策略模式

适用于需要在运行时动态选择算法或行为的情况。

原始代码:

代码语言:txt
复制
if (paymentMethod === 'creditCard') {
    processCreditCardPayment();
} else if (paymentMethod === 'paypal') {
    processPaypalPayment();
} else if (paymentMethod === 'bankTransfer') {
    processBankTransferPayment();
} else {
    throw new Error('Unsupported payment method');
}

重构后:

代码语言:txt
复制
const paymentStrategies = {
    creditCard: processCreditCardPayment,
    paypal: processPaypalPayment,
    bankTransfer: processBankTransferPayment
};

const paymentFunction = paymentStrategies[paymentMethod];
if (paymentFunction) {
    paymentFunction();
} else {
    throw new Error('Unsupported payment method');
}

四、应用场景

  • 复杂条件判断:当if语句嵌套层数较多时。
  • 业务逻辑复杂:当业务逻辑需要根据多种条件进行不同处理时。
  • 代码维护:当需要对现有代码进行优化和重构时。

通过以上几种方式,可以有效减少if语句的嵌套层数,提高代码的可读性和可维护性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Cerebral Cortex:注意缺陷多动障碍ADHD多层网络动态重构分析

多层网络是一种新型的网络模型,目前在神经科学领域的应用越来越多。时变多层网络可以描述相邻网络层之间的时间流。可以使用多层社区检测算法将其分解为跨越时间的社区。...招募和整合是针对多层网络设计的网络重构的两个统计指标。这些指标基于概率量化社区结构随时间的变化,并参考不同功能系统内部和之间的动态交互。...但目前已逐渐应用于神经系统疾病的研究,如癫痫和躁狂,并在患者中发现了一些不同的动态网络重构模式。然而,这些动态特征在ADHD患者中尚不清楚。...超邻接矩阵表示多层网络,一个f层的多层网络描述为: Aα代表了α层层内网络邻接矩阵,Hf1f2代表层间连接矩阵。 多层社区检测算法定义脑社区。...讨论 与传统网络相比,时变多层网络的优势在于它能够模拟网络中跨越时间的多种交互作用。在我们的研究中,我们引入多层社区检测和两个指标,即招募和整合,来探讨成人ADHD异常动态网络重构。

50740

React.js 结合 Next.js 的入门与 Snapaper 完全重构

不过有了 Vue.js 的一些基础后入门应该算是蛮快的,两天就重构完了 Snapaper (https://www.snapaper.com) 呢 React 入门 React.js 当然是有中文文档的...正好之前浏览器引入 Vue.js 的粗糙项目 Snapaper 刷题网站年久失修,就拿它开刀啊不是动土啊不是开盘啊不是折腾了 Next.js 使用 路由配置 Next.js 中同样不需要手动配置路由,...具体可以参考之前关于 Nuxt.js 的文章: 博客 Nuxt.js 移植重构与服务端渲染入门实现 ID: 659 发布于: 2020-03-13 20:09:20 CSS 预渲染 Next.js 中内置的是对...路由与进度条 不同于 Nuxt.js 的是 Next.js 没有内置加载进度条 (虽然上次 Nuxt.js 也没用原生的),这次加载进度条也同样是在路由改变时的拦截函数中实现的,同样使用 NProgress...于是这次的重构又是不同的设计风格了...

4.4K20
  • 重构学习-重构原则

    什么是重构: 视上下文重构有两个不同的定义,第一个定义是名词形式 对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本 重构的另一人用法是动词形式 使用一系列的重构手法...强调一下,重构不会改变软件的可观察行为,也就是说重构之后功能和原来一样。 为什么要重构: 重构改进软件设计,如果没有重构,程序的设计会逐渐腐败变质。...重构的原动力是:代码设计无法帮助我轻松的添加我所需要的功能,如果用某种设计方式,添加功能会简单的多,这种情况可以用 重构来弥补。重构是一个快速流畅的过程,一旦完成重构,新特性的添加会更快速,更流畅。...如果在修改bug和审查代码时发现不合理的地方也要进行重构,这样是为了更好的阅读和理解代码 何时不重构: 如果发现代码太混乱,重构它不如重写来的简单这种情况下建议重写,不用进行重构。...最后你没有时间进行重构表明你其实早就该进行重构了 重构与性能: 有时为了让代码更容易理解,会做出一些使程序运行变慢的修改,这是个重要的问题。

    1.1K50

    多层感知机

    多层感知机简介 多层感知机就是含有至少一个隐藏层的由全连接层组成的神经网络,且每个隐藏层的输出通过激活函数进行变换,多层感知机的层数个各个隐藏层中隐藏单元个数都是超参数,输出可以通过以下公式计算得出:...其中Φ代表激活函数; 隐藏层 多层感知机在单层神经网络的基础上引入一到多个隐藏层(hidden layer),位于输入层和输入层之间,其中的隐藏层和输出层都是全连接层,神经网络图如下:...xyplot(x, y, 'tanh') d2l.plt.show() y.backward() xyplot(x, x.grad, 'grad of tanh') d2l.plt.show() 多层感知机的实现...从零开始实现多层感知机, 代码如下: #!...lr = 5, 0.5 d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, params, lr) 简洁实现多层感知机

    62030

    【重构】重构概要--六大重构模块

    重构方法介绍: 重构改善既有代码的设计 一 重新组织函数 关于注释 :要尽可能少的使用注释 , 注释越多代码的可读性反而更差,注释可以使用函数名来代替 , 不要管函数名有多长, 即使函数名比函数中的代码还要长也不要紧...能更加明确的表明函数的意义,可以将这个算法替换; 二 在对象之间搬移特性 功能模块归属类:对象设计中, 将一个功能模块放在哪个类中,是最重要的任务之一,谁也不能一开始保证设计的是完全合适的,这就需要“对象之间搬移特性”这个重构方法...搬移函数和搬移字段:这两种重构方法都可以解决大多数的问题,如果两种方法同时使用,先搬移字段,在搬移函数。

    72030

    重构

    个人觉得代码重构非常有必要,写程序不但要给机器运行,更让人看的明白。 写代码如写诗一样才行。(内容代码为主,建议实践一下比较好点) 实例 一个图书馆出租书的程序。...接着:直接看下面的代码重构呗 Book类: 将按照书的不同类型,按照不同价格统计的方法移动到Book类中,因为这个按理应该属于Book类中的。...第二次重构 经过第一次重构,还是没有实现需求修改增加多个分类的效果。那么接下来使用接口抽象来再次重构。...最后想说: 如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达成目的,那么就先重构那个程序,使特性的添加比较容易进行,然后再添加特性。...参考文章 【重构】作者: Martin Fowler

    87410

    什么是多层感知机(什么是多层感知机)

    1.感知机与多层感知机 1.1 门 与门:实现逻辑“乘”运算 y=AB 与门真值表 A B y 0 0 0 0 1 0 1 0 0 1 1 1 非门:实现逻辑非,一对一输出...y(s1,s2与门) 0 0 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 0 1 0 下面用感知机的方法表示: 上图中有s1和s2 两层感知机,叠加了多层的感知机也称为多层感知机...常见的多层感知机(神经网络)的图: 单层感知机与多层感知机的区别: . 多层感知机在输入层与输出层之间多了一层隐藏层 . 每层神经元与下一层神经元全互连 ....Tensorflow实现多层感知机 tensorflow训练神经网络的4个步骤 step1:定义计算公式 隐藏层权重初始化,激活函数的选择 step2:定义损失函数 及选择优化器 损失函数有平方误差,交叉信息熵等

    91110

    【深度学习基础】多层感知机 | 多层感知机概述

    这种架构通常称为多层感知机(multilayer perceptron),通常缩写为MLP。下面,我们以图的方式描述了多层感知机。...图1 一个单隐藏层的多层感知机,具有5个隐藏单元   这个多层感知机有4个输入,3个输出,其隐藏层包含5个隐藏单元。输入层不涉及任何计算,因此使用此网络产生输出只需要实现隐藏层和输出层的计算。...因此,这个多层感知机中的层数为2。注意,这两个层都是全连接的。每个输入都会影响隐藏层中的每个神经元,而隐藏层中的每个神经元又会影响输出层中的每个神经元。   ...然而,正如【深度学习基础】线性神经网络 | softmax回归 所说,具有全连接层的多层感知机的参数开销可能会高得令人望而却步。...(四)通用近似定理   多层感知机可以通过隐藏神经元,捕捉到输入之间复杂的相互作用,这些神经元依赖于每个输入的值。我们可以很容易地设计隐藏节点来执行任意计算。

    15510

    重构

    说到重构,我们再来了解一下定义:重构是一种对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,利用设计思想、设计原则、设计模式编程规范等理论来优化代码。...重构目的:1.重构是时刻保证代码质量的一个极其有效的手段,防止代码腐化。当代码腐化到一定程度,量变引起质变,项目的维护成本已经高过重新开发一套新代码的成本。2.优秀的架构和代码是迭代出来的。...时机:持续的重构(做好重构计划,小步快跑,要保证代码仓库中的代码一直处于可运行、逻辑正确的状态.要做好与新功能,老代码的兼容工作。利用静态代码扫描,codeReview做好日常持续重构)。...重构手法总结为“十六字心法”,非常形象、贴切:旧的不变,新的创建。一步切换,旧的再见。...“旧的不变”是指先不动旧方法;“新的创建”是指创建一个跟原来方法功能相同的新方法,你可以通过先复制再重构的方式,来得到这个新方法,也就是整个系统的一个增量;“一步切换”是指,在充分测试之后,新的方法可以完全替代旧方法了

    23830

    【深度学习基础】多层感知机 | 多层感知机的实现

    文章目录 一、多层感知机的从零开始实现 (一)初始化模型参数 (二)激活函数 (三)模型 (四)损失函数 (五)训练 二、多层感知机的简洁实现 模型 小结 一、多层感知机的从零开始实现   我们已经在【...深度学习基础】多层感知机 | 多层感知机概述 中描述了多层感知机(MLP),现在让我们尝试自己实现一个多层感知机。...d2l.predict_ch3(net, test_iter) 二、多层感知机的简洁实现   本节将介绍通过高级API更简洁地实现多层感知机。...然而如果有大量的层,从零开始实现多层感知机会变得很麻烦(例如,要命名和记录模型的参数)。 我们可以使用高级API更简洁地实现多层感知机。...对于相同的分类问题,多层感知机的实现与softmax回归的实现相同,只是多层感知机的实现里增加了带有激活函数的隐藏层。

    10300

    代码重构(三):数据重构规则

    在《代码重构(一):函数重构规则(Swift版)》和《代码重构(二):类重构规则(Swift版)》中详细的介绍了函数与类的重构规则。...对数据的组织形式以及操作进行重构,提高了代码的可维护性以及可扩展性。 与函数重构与类重构类似,对数据结构的重构也是有一定的规则的。通过这些规则可以使你更好的组织数据,让你的应用程序更为健壮。...在本篇博客中将会结合着Swift代码实现的小实例来分析一下数据重构的规则,并讨论一下何时使用那些重构规则进行数据重构。...还是那句话“物极必反”呢,如果不恰当的使用重构规则,或者过度的使用重构规则不但起不到重构的作用,有时还会起到反作用。废话少说,进入今天数据重构的主题。 一....在本次重构中,依照重构的规则,我们不会去修改我们的测试用例,这一点很重要。 (1)从根本解决问题,首先我们对Customer进行重构。

    1K10

    代码重构(二):类重构规则

    在上篇博客《代码重构(一):函数重构规则(Swift版)》中,详细的介绍了函数的重构规则,其中主要包括:Extract Method, Inline Method, Inline Temp, Replace...关于上述这些函数重构的规则更为详细的信息请参考上一篇博客,在此就不做过多的赘述了。 今天这篇博客主要介绍一下类的重构。在我们写代码时,有些类是不规范的,需要重构。...当然,在你实现时,测试用例是必不可少的,因为测试用例可以在你重构时及时发现因为重构而产生的错误。言归正传,进入今天博客的主题。...搬移后,我们可以再使用函数的重构规则对新组的函数进行重构。下方就通过一个实例来直观的感受一下Move Method。...关于这两个函数重构的规则的具体细节请参见《代码重构(一):函数重构规则(Swift版)》中的介绍。下方截图是对BookCustomer类中的charge()函数进行重构后的结果,如下所示: ?

    1.3K100

    代码重构(一):函数重构规则

    此时,你要考虑重构了。 重构,在《重构,改善既有代码的设计》这本经典的书中给出了定义,大概就是:在不改变代码对外的表现的情况下,修改代码的内部特征。...本篇博客的主题就是通过一些列的重构手法,对既有的需要重构的函数或者方法进行重构。并且会将每个示例在GitHub上进行分享,感兴趣的小伙伴可以对其进行下载。...实在是没有必要再找其他的例子说明这些重构规则,因为《重构:改善既有的代码的设计》这本书真的是太经典了。 1.需要重构的代码如下所示。...在写好需要重构的类后,我们要为该类写一个测试用例。这便于在我们重构时对重构的正确性进行验证,因为每次重构后都要去执行该测试用例,以保证我们重构是正确的。...所为我们可以再次对上述方法进行重构,重构后的具体代码如下: ? 今天的博客主要讲了如何对既有代码中的函数进行重构,在本篇博客中提到了8大规则。

    1.6K50
    领券