当前位置:   article > 正文

js中如何更好的替代if...else...语句_js map 替代 if

js map 替代 if

在大家平常开发过程中条件判断语句 if else 的使用频率还是很高的,特别是满屏的if...else...让人难免看着就头疼。
这里我们在某些特定场景为大家额外提供一种其他的思路。

一、二元逻辑运算符:||

  1. /**
  2. *在函数定义时,常有若函数调用未提供参数则使用默认值的情景,
  3. */
  4. function fn(a) {
  5. if(!a){ //可以使用if else来解决这个问题:
  6. a = 'test';
  7. };
  8. };
  9. //有没有更优雅的去除做法呢? 我们可以使用 || 运算符来实现,如下:
  10. function fn(a) {
  11. a = 'test' || a
  12. }

二、三元运算符: ?  :

  1. /**
  2. *在开发中三元运算的使用场景其实非常多
  3. *有时候根据条件不同我们可能要分别对应返回不同的数据
  4. */
  5. let fn = function () { //常规if...else...
  6. let flo = true;
  7. if (flo) {
  8. return 1;
  9. } else {
  10. return 2;
  11. };
  12. };
  13. let f = fn(); // 1
  14. //改用三元运算符
  15. let fn1 = function () {
  16. let flo = true;
  17. // 三元
  18. return flo ? 1 : 2;
  19. };
  20. let f1 = fn1();//1

三 、switch case

  1. /**
  2. *短路求值与三元运算符固然好用,但其实有一个遗憾,
  3. *它们都只能解决非A即B的条件判断,凡是条件判断超过两种就显得十分无力了。
  4. *那难道我们只能使用 else if 吗,其实可以使用 switch case。
  5. */
  6. /**
  7. *例如A情况我们希望A情况输出a,B情况输出b,C情况输出c,其它情况输出d
  8. *用 else if 与switch case分别是这样:
  9. */
  10. let nm = 'B';
  11. if (nm === 'A') {
  12. console.log('a');
  13. } else if (nm === 'B') {
  14. console.log('b');
  15. } else if (nm === 'C') {
  16. console.log('c');
  17. } else {
  18. console.log('d');
  19. };
  20. switch (nm) {
  21. case 'A':
  22. console.log('a');
  23. break;
  24. case 'B':
  25. console.log('b');
  26. break;
  27. case 'C':
  28. console.log('c');
  29. default:
  30. console.log('d');
  31. }

四 、 对象配置

  1. //如果条件超过三种,else if 写起来不太优雅,switch case代码行数也差不多,如下:
  2. function formatData(a) {
  3. let c = "";
  4. if (a === 1) {
  5. c = "汉族";
  6. } else if (a === 2) {
  7. c = "苗族";
  8. } else if (a === 3) {
  9. c = "维吾尔族";
  10. } else if (a === 4) {
  11. c = "回族";
  12. } else if (a === 5) {
  13. c = "藏族";
  14. }
  15. // ... 等等等等
  16. return c;
  17. }
  18. var result = formatData(2) // 对应的苗族
  19. //按照我们56个民族来分,我们岂不是要写56个if...else...,这是可以利用配置对象方式来解决
  20. const obj = {
  21. 1: "汉族",
  22. 2: "苗族",
  23. 3: "维吾尔族",
  24. 4: "回族",
  25. 5: "藏族",
  26. // ...等等等等
  27. };
  28. function formatData(a) {
  29. return obj[a]
  30. }
  31. var result = formatData(2); // 苗族

在实际开发遇到过这样一个情景,需要根据用户不同的操作类型对同一份数据进行不同加工,比如新增,修改,删除等。使用 else if :

  1. function del(){}; // 删除操作
  2. function add(){}; // 新增
  3. function update(){}; // 更新
  4. function process(operateType) {
  5. if (operateType === 'del') {
  6. del()
  7. } else if (operateType === 'add') {
  8. add()
  9. } else if (operateType === 'update') {
  10. update()
  11. };
  12. };
  13. process('del');// 删除

还有一种很棒的做法就是通过对象配置,将你的操作类型作为key,具体操作的函数作为value,如下:

  1. function del(){}; // 删除操作
  2. function add(){}; // 新增
  3. function update(){}; // 更新
  4. let typeFn = {
  5. 'del': del,
  6. 'add': add,
  7. 'update': update
  8. };
  9. function process(operateType) {
  10. typeFn[operateType]();
  11. };
  12. process('del'); //删除

也可以使用 ES6 的 map 数据结构,像这样:

  1. let typeFn = new Map([
  2. ['del_1', function () {/*do something*/ }],
  3. ['add_2', function () {/*do something*/ }],
  4. ['update_3', function () {/*do something*/ }],
  5. ]);
  6. function process(operateType, status) {
  7. typeFn.get(`${operateType}_${status}`)();
  8. };
  9. process('del', 1); // 删除

五 、 数组配置

  1. /**
  2. *处理条件判断时,需要根据某阶段设置不同的数据
  3. *如[0,100)–a,[100,200)–b,[200,300)–c,[300-无穷]–d
  4. */
  5. //if...else...
  6. function setNm(mun) {
  7. if (mun< 100) {
  8. return 'a';
  9. } else if (mun< 200 && mun>= 100) {
  10. return 'b';
  11. } else if (mun< 300 && mun>= 200) {
  12. return 'c';
  13. } else if (mun>= 300) {
  14. return 'd';
  15. };
  16. };
  17. let nm = setNm(351); //d
  18. //其实也可以通过数组配置的形式将条件结果抽离出来
  19. function setNm(param) {
  20. let mun = [300, 200, 100];
  21. let nm = ['d', 'c', 'b', 'a'];
  22. //对数据做抽离处理,不用加更多的if.else.只对数据处理
  23. for (let i = 0; i < mun.length; i++) {
  24. if (param >= mun[i]) {
  25. return nm[i];
  26. };
  27. };
  28. return nm[nm.length - 1];
  29. };
  30. let nm = setNm(250); //c

当然具体还是得看业务逻辑,如只能使用if...else...我们该用还是得用

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/377862
推荐阅读
相关标签
  

闽ICP备14008679号