当前位置 博文首页 > Aybuai的博客:switch case 优化

    Aybuai的博客:switch case 优化

    作者:[db:作者] 时间:2021-09-13 22:29

    前情提示:前几天遇到代码里面switch case写的又长又臭,维护起来很麻烦,于是开始优化。

    看一下原来代码:
    在这里插入图片描述

    看上去是不是很蠢,switch case里面还有一层switch case。严重影响可维护性。
    先设定一个函数,传进来id为1,2,3,4分别返回不同的值,下面说一下三种解决方案。

    let id
    switch (id) {
    	case 1:
    	   return 'a'
    	case 2:
    	   return 'b'
    	case 3:
    	   return 'c'
    	case 4:
    	   return 'd'
    }
    

    方案一:

    Map里接受一个具有iterable接口的对象,然后对其进行遍历,get传入的值如果跟Map里key值对应,那么就会返回与key对应的value,如果是赋值操作Map可以完美替代switch case。代码如下:

    let map = new Map([
    	[1, 'a'],
    	[2, 'b'],
    	[3, 'c'],
    	[4, 'd']
    ])
    let str = map.get(id)
    console.log(str)
    

    方案二:

    lookup对象:将所有结果写到一个对象里,传进key,返回key对应的value。代码如下:

    let obj = {
         1: 'a',
         2: 'b',
         3: 'c',
         4: 'd'
    }
    let str = obj[id]
    console.log(str)
    

    方案三:

    分别用一个数组存放key和value,然后循环遍历key数组,拿到相对应的value。代码如下:

    let str
    let arrKey = [1, 2, 3, 4]
    let arrValue = ['a', 'b', 'c', 'd']
    arrKey.map(function (key, index) {
        if (id === key) {
            str = arrValue[index];
        }
    })
    console.log(str)
    

    补充:
    有时候switch case作用在图片路径上,也可用上述方案二,如下:

    <img :src="arrKey[id]">
    
    data () {
            return {
                arrKey: {
                    '0': require('../../../../assets/public/1.png'),
                    '1': require('../../../../assets/public/2.png'),
                    '2': require('../../../../assets/public/3.png'),
                    '3': require('../../../../assets/public/4.png'),
                    '4': require('../../../../assets/public/5.png'),
                    '5': require('../../../../assets/public/6.png')
                }
            }
        }
    

    以上,互勉~~~

    cs
    下一篇:没有了