只会if-else和switch?多层逻辑判断的优雅写法

简介: 只会if-else和switch?多层逻辑判断的优雅写法

逻辑判断之入门——If else

const run = (key: number) => {
    if(key === 1){
        console.log('1')
    }else if(key === 2){
        console.log('2')
    }else{
        console.log('3')
    }
}
复制代码

逻辑判断之入门——Switch

const run = (key: number) => {
    switch(key){
        case 1:
            console.log('1');
            break;
        case 2:
            console.log('2');
            break;
        case 3:
            console.log('3');
            break;
        default:
            break;
    }
}
复制代码

逻辑判断之进阶——单一判断、Switch与Map

const map = new Map([
    [1, ()=> {console.log('1')}],
    [2, ()=> {console.log('2')}],
    [3, ()=> {console.log('3')}]
])
const run = (key: number) => {
    const func = map.get(key);
    if(!func) return;
    func();
}
复制代码

逻辑判断之高级——多层判断、Switch与Map

背景:上述的🌰 都是基于单层判断的,下面给出一个多层判断的🌰 :

const run = (key: number, status: string) => {
    if(key === 1){
        switch(status){
            case 'success':
                console.log('key: 1, status: success');
                break;
            case 'fail':
                console.log('key: 1, status: fail');
                break;
        }
    }else if(key === 2){
        switch(status){
            case 'success':
                console.log('key: 2, status: success');
                break;
            case 'fail':
                console.log('key: 2, status: fail');
                break;
        }
    }
}
复制代码

下面进行优化:

使用Map优化

const func = (key: number, status: string) => {
    console.log(`key: ${key}, status: ${status}`);
}
const map = new Map([
    [{key: 1, status: 'success']: ()=> func(1, 'success'),
    [{key: 2, status: 'success']: ()=> func(2, 'success'),
    [{key: 1, status: 'fail']: ()=> func(1, 'fail'),
    [{key: 2, status: 'fail']: ()=> func(2, 'fail')
])
const run = (key: number, status: string) => {
    let cur = Array.from(map).find(item=>item[0].key === number && item[0].status===status);
    if(cur && cur[1]){
        cur[1].call(this);
    }
}
复制代码

缺点:如果有10种key,20种status,那么在map里需要写200个逻辑。

使用正则表达式

const func = (key: number, status: string) => {
    console.log(`key: ${key}, status: ${status}`);
}
const map = new Map([
    [/^success_[1-4]$/]: ()=> func(key, 'success'),
    [/^success_.*$/]: ()=> func(key, 'success'),
])
const run = (key: number, status: string) => {
    let cur = Array.from(map).find(item=>item[0].test(`${status}_${number}`));
    if(cur && cur[1]){
        cur[1].call(this);
    }
}
复制代码

这里使用了正则表达式来作为key,这也是为什么要用map而不是object的原因。

逻辑判断之高级——多层判断、策略模式

avascript设计模式之策略模式

策略模式的定义:定义一系列的算法,独立进行封装,并使他们可以相互替换。

下面举个例子:

const run = (key: number, status: string) => {
    if(key === 1){
        switch(status){
            case 'success':
                console.log('key: 1, status: success');
                break;
            case 'fail':
                console.log('key: 1, status: fail');
                break;
        }
    }else if(key === 2){
        switch(status){
            case 'success':
                console.log('key: 2, status: success');
                break;
            case 'fail':
                console.log('key: 2, status: fail');
                break;
        }
    }
}
// 下面使用组合函数进行一些优化:将各种算法进行了封装,但后续更改不太灵活
const getSuccessStatusText = (key: number) => {
    return `key: ${key}, status: success`
}
const getFailStatusText = (key: number) => {
    return `key: ${key}, status: fail`
}
const run = (key: number, status: string) => {
    if(status === 'success'){
        console.log(getSuccessStatusText(key))
    }else if(status === 'fail'){
        console.log(getSuccessStatusText(key))
    }
}
run(1, 'success')
// 下面使用策略模式
const statusAction = {
    "success": function(key: number)=>{
       return `key: ${key}, status: success`
    },
    "fail": function(key: number)=>{
       return `key: ${key}, status: fail`
    }
}
const run = (key: number, status: string) => {
    console.log(statusAction[status](key))
}
run(1, 'success')
复制代码

总结

  • 单层判断时,使用Switch,可以根据自己喜好加入Map
  • 多层判断时,使用Switch+Map+正则表达式,策略模式



相关文章
|
3月前
|
Python
循环的嵌套
在编程中,循环结构是一种非常重要的控制结构,用于重复执行一段代码。而循环的嵌套则是指在一个循环内部又包含了另一个或多个循环,使得代码的执行更加复杂和灵活。本文将介绍循环嵌套的概念、使用场景以及示例代码。
51 1
|
11月前
if语句的嵌套
if语句的嵌套。
101 1
|
1月前
|
语音技术 数据安全/隐私保护
语音识别,猜猜心里数字讲解,猜数字的组合,判断语句的嵌套,嵌套语句使用很简单,我们写一个外层嵌套的条件,利用缩进,满足条件,才会执行条件2,判断语句综合案例,如何产生变量的随机数字,while循环应用
语音识别,猜猜心里数字讲解,猜数字的组合,判断语句的嵌套,嵌套语句使用很简单,我们写一个外层嵌套的条件,利用缩进,满足条件,才会执行条件2,判断语句综合案例,如何产生变量的随机数字,while循环应用
|
3月前
|
算法 Python
Python函数的嵌套调用:深入理解与应用
Python函数的嵌套调用:深入理解与应用
71 1
|
3月前
|
C++
C++中使用嵌套的if语句
C++中使用嵌套的if语句
19 1
|
3月前
|
C++
C++语言中Switch语句循环和作用类型
C++语言中Switch语句循环和作用类型
53 0
|
3月前
C 语言中的 switch 语句和 while 循环详解
替代多重 if..else 语句,可以使用 switch 语句。switch 语句用于选择多个代码块中的一个来执行
61 0
|
3月前
|
存储 程序员 编译器
【新手解答5】深入探索 C 语言:宏中的文本、标识符和字符串 + 递归运算、条件语句、循环 + `switch-case` 与多项条件和枚举的差别
【新手解答5】深入探索 C 语言:宏中的文本、标识符和字符串 + 递归运算、条件语句、循环 + `switch-case` 与多项条件和枚举的差别
70 0
|
API Python
一日一技:巧用or关键字实现多重条件判断
一日一技:巧用or关键字实现多重条件判断
95 0
|
Java Maven Ruby
去掉复杂的逻辑计算,get一下Aviator吧
去掉复杂的逻辑计算,get一下Aviator吧
447 0