if else的多种替换方式

发布时间 2023-10-14 22:34:38作者: 上官兰雨

1)利用逻辑判断的短路运算来实现 && 和 ||(&& 中第一个表达式为假就不会去处理第二个表达式,|| 则相反)

// if为真
if (bool) {
 value = getYes();
}
// &&改版
bool && (value = getYes());
 
// if为假
if (!bool) {
 value = getNo();
}
bool || (value = getNo());

2)三元运算符改写if else

// if 版本
if (bool) {
 value = 1;
} else {
 value = 2;
}
 
// 三元运算符 版本
value = bool ? 1 : 2;

3)数据驱动法

function formatData(a) {
  let c = "";
  if (a === 1) {
    c = "汉族";
  } else if (a === 2) {
    c = "苗族";
  } else if (a === 3) {
    c = "维吾尔族";
  } else if (a === 4) {
    c = "回族";
  } else if (a === 5) {
    c = "藏族";
  }
 	// ... 等等等等
  
  return c;
}
var result = formatData(2) // 对应的苗族

数据驱动版本
const obj = {
  1: "汉族",
  2: "苗族",
  3: "维吾尔族",
  4: "回族",
  5: "藏族",
  // ...等等等等
};
function formatData(a) {
  return obj[a]
}
var result = formatData(2);  // 苗族

4)ES6 的 map 数据结构

function del(){}; // 删除操作
function add(){}; // 新增
function update(){}; // 更新
function process(operateType) {
    if (operateType === 'del') {
        del()
    } else if (operateType === 'add') {
        add()
    } else if (operateType === 'update') {
        update()
    };
};
process('del');// 删除

es6的map数据结构
let typeFn = new Map([
    ['del', function () {/*do something*/ }],
    ['add', function () {/*do something*/ }],
    ['update', function () {/*do something*/ }],
]);

function process(operateType) {
    typeFn.get(`${operateType}`)();
};
process('del'); // 删除

5)数组

function youAreMyHero(experience) {
    if (experience < 100) {
        return '萌新';
    } else if (experience < 200 && experience >= 100) {
        return '骑士';
    } else if (experience < 300 && experience >= 200) {
        return '英雄';
    } else if (experience >= 300) {
        return '传说';
    };
};
let level = youAreMyHero(351); //传说

数组替代
function youAreMyHero(param) {
    let experience = [300, 200, 100];
    let level = ['传说', '英雄', '骑士', '萌新'];

    for (let i = 0; i < experience.length; i++) {
        if (param >= experience[i]) {
            return level[i];
        };
    };
    return level[level.length - 1];
};

let level = youAreMyHero(250); //英雄