JavaScript: 代码分支优化 if...else...if

javascript 复制代码
function routingJump(route_name) {
    if (route_name === 'home') {
        console.log('跳转首页');
    } else if (route_name === 'shop') {
        console.log('跳转购物页');
    } else if (route_name === 'information') {
        console.log('跳转资讯页');
    } else if (route_name === 'main') {
        console.log('跳转我的');
    } else if (route_name === 'course') {
        console.log('跳转课程页');
    } else if (route_name === 'activity') {
        console.log('跳转活动页');
    } else if (route_name === 'help') {
        console.log('跳转帮助页');
    } else {
        console.log('不跳转页面');
    }
}

routingJump('home'); // 跳转首页

上述代码是我在项目中看到并模拟出来的一个分支语句, 可以看到有大量的 if...else

那么我们如何进行优化呢?

方法1: 写一个对象, key为条件, value为满足条件后执行的语句

javascript 复制代码
function routingJump(route_name) {

    const map = {
        home: "跳转首页",
        shop: "跳转购物页",
        information: "跳转资讯页",
        main: "跳转我的",
        course: "跳转课程页",
        activity: "跳转活动页",
        help: "跳转帮助页"
    }

    if (map[route_name]) {
        console.log('map[route_name]: ', map[route_name]);
    } else {
        console.log('不跳转页面');
    }
}

routingJump('home'); // 跳转首页

但这么写会有一个问题, 那就是假设每个分支要做的事情不同, 那这样写就没办法实现了, 请看方法2

方法2: 写一个对象, key为条件, value为满足条件后执行的语句(函数形式)

javascript 复制代码
function routingJump(route_name) {

    const map = {
        home: () => console.log("跳转首页"),
        shop: () => console.log("生成随机数"),
        information: () => console.log("排序"),
        main: () => console.log("关闭页面"),
        course: () => console.log("打印"),
        activity: () => console.log("监听某些事"),
        help: () => console.log("......")
    }

    if (map[route_name]) {
        map[route_name](); // <-------------------这里要改为调用函数
    } else {
        console.log('不跳转页面');
    }
}

routingJump('shop'); // 生成随机数

假如程序复杂, 判断条件很苛刻, 那么又应该怎么写呢? 请看方法3

方法3: 使用元组

假设

  1. 路由名称里面只要包含了h这个字母, 统统跳转首页
  2. 路由名称里面以s开头的, 统统跳转购物页
  3. 路由名称里面以n结尾的, 统统跳转资讯页
  4. 路由名称里面包含m, 但不包含d的, 统统跳转我的
  5. 路由名称里面包含a, 但长度<10的 统统跳转活动页
javascript 复制代码
function routingJump(route_name) {

    const map = [
        [
            () => route_name.includes('h'),
            () => console.log("跳转首页")
        ],
        [
            () => route_name.startsWith('s'),
            () => console.log("跳转购物页")
        ], 
        [
            () => route_name.endsWith('n'),
            () => console.log("跳转资讯页")
        ],
        [
            () => route_name.includes('m') && !route_name.includes('d'),
            () => console.log("跳转我的")
        ],
        [
            () => route_name.includes('a') && route_name.length < 10,
            () => console.log("跳转活动页")
        ]
    ]

    const targetFn = map.find(item => item[0]());

    if (targetFn) {
        targetFn[1]()
    } else {
        console.log('不跳转页面');
    }
}

routingJump('activity'); // 跳转活动页

以上就是一些简单常用的优化手段, 当然还有 switchMap等等, 也可以避免大量的if...else

相关推荐
polaris_tl几秒前
一行 `compress: false`,为什么让 SSE 首包恢复实时返回
前端
海边的云2 分钟前
别再让 AI 瞎改代码:一套让大模型「收敛」的前端专家 Skill》
前端
kisshyshy3 分钟前
给端侧大模型装上“发动机”:React 合成事件 + 进度条组件全解
前端·react.js·node.js
hunterandroid14 分钟前
DataStore 工程化实践:迁移、并发更新与异常恢复
android·前端
晓说前端14 分钟前
TypeScript 核心语法进阶 —— 字面量类型与类型推论
前端·typescript
不简说40 分钟前
JS 代码技巧 vol.8 — 20 个函数式编程实战,把 if/else 拍扁的骚操作
前端·javascript·面试
头茬韭菜1 小时前
4.9 SSRF 防护 — Web 工具的出站安全与私有 IP 拦截
前端·tcp/ip·安全
Cobyte1 小时前
模板 DSL 解析器中的状态机设计
前端·javascript·vue.js
颜酱1 小时前
# 02 | 搭骨架:用 LangGraph 编排 12 步工作流(思路)
前端·人工智能·后端
颜酱1 小时前
02 | 搭骨架:用 LangGraph 编排 12 步工作流
前端·人工智能·后端