如何优化代码中的多层if嵌套

前言

日常开发中经常要针对不同业务场景作出不同行为与判断,在最早接触的时候普遍都是使用如下代码进行业务区分:

if(res.data.code===0){
//do something
}else if(res.data.code===1002){
//do something
}else if(res.data.code===1004){
//do something
}else{
//do something
}

这样的代码既不好维护又十分冗长,既不优雅又不美观,属于典型的低质量代码.

稍微进阶一点的会懂得使用switch函数进行简化和区分,但并不能从根本上解决这类问题.

究其原因,此类低质量代码产生的实质来源于面向过程编程的缺陷.

如何解决?

Map

new Map([array1,array2])语法是ES6中诞生的,主要功能是将多个键值对数组合并成一个新的Map对象,其本质与使用不同于Object,详细区别点击这里查看:What is Map?

Map简单的set/get使用

Map对象的创建会对键值进行顺序插入,对相同的键仅会保留最后顺序的值

const StatusCode = new Map(
[[401,'请求错误'],[402,'未授权'],[403,'拒绝访问']]
);
StatusCode.get(401) //'请求错误'
StatusCode.set(401,'My lord,the time has changed!')
StatusCode.get(401) //'My lord,the time has changed!'
StatusCode.set([404,'first'],[404,'second'])
StatusCode.get(404) //second

复杂业务函数处理

	const _this = this;
    const StatusCode = new Map([
      [
        401,
        async () => {
          console.log(_this.requset(params));
        }
      ],
      [
        402,
        () => {
          console.log("未授权");
        }
      ],
      [
        403,
        () => {
          console.log("拒绝访问");
        }
      ]
    ]);
    const ShowMessage = code => {
      //Map对象转数组
      [...StatusCode].forEach(([key, value]) => {
        key === code ? value.call() : "";
      });
    };
    ShowMessage(402) //'未授权'

版权声明:本文为weixin_44243056原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。